14ee2ad04344446e610172a0e73949212923014dfSebastian Redl// Copyright 2014 The Chromium Authors. All rights reserved. 22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// Use of this source code is governed by a BSD-style license that can be 32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// found in the LICENSE file. 42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <algorithm> 62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <stack> 72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/files/file_util.h" 92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/message_loop/message_loop.h" 10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl#include "base/run_loop.h" 112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "base/thread_task_runner_handle.h" 122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/drive/drive_uploader.h" 132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/drive/fake_drive_service.h" 147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "chrome/browser/drive/test_util.h" 1589d9980bbc2e4a4ac86673e6ec16fb9f5babb63bDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/callback_helper.h" 160eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidis#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" 17e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/fake_drive_service_helper.h" 18e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" 192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" 202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" 212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" 222a7fb27913999d132cf9e10e03dc5271faa2e9d3John McCall#include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" 2389eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis#include "chrome/browser/sync_file_system/local/canned_syncable_file_system.h" 240b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor#include "chrome/browser/sync_file_system/local/local_file_sync_context.h" 257a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCall#include "chrome/browser/sync_file_system/local/local_file_sync_service.h" 262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/sync_file_system/local/sync_file_system_backend.h" 27a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall#include "chrome/browser/sync_file_system/sync_file_system_test_util.h" 286ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl#include "chrome/browser/sync_file_system/syncable_file_system_util.h" 297c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner#include "chrome/test/base/testing_profile.h" 306a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor#include "content/public/test/test_browser_thread.h" 317c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner#include "content/public/test/test_browser_thread_bundle.h" 3283d63c78810556d26b62ac4cbae2eda6cdd2570cSteve Naroff#include "content/public/test/test_utils.h" 3314f79002e58556798e86168c63e48d533287eda5Douglas Gregor#include "extensions/common/extension.h" 3410e286aa8d39fb51a21412850265d9dae74613eeChris Lattner#include "google_apis/drive/drive_api_parser.h" 353251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor#include "net/url_request/url_request_context_getter.h" 3614f79002e58556798e86168c63e48d533287eda5Douglas Gregor#include "storage/browser/fileapi/file_system_context.h" 37bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor#include "testing/gtest/include/gtest/gtest.h" 382bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor#include "third_party/leveldatabase/src/helpers/memenv/memenv.h" 39ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor#include "third_party/leveldatabase/src/include/leveldb/env.h" 400a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor 4117fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor#define FPL(a) FILE_PATH_LITERAL(a) 4217fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor 432596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbarnamespace sync_file_system { 442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregornamespace drive_backend { 45fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer 4614f79002e58556798e86168c63e48d533287eda5Douglas Gregortypedef storage::FileSystemOperation::FileEntryList FileEntryList; 4703013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer 48f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregornamespace { 493c304bd9ec2b4611572d4cbae9e1727bbecb5dc9Chris Lattner 50cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregortemplate <typename T> 51f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorvoid SetValueAndCallClosure(const base::Closure& closure, 522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor T* arg_out, 538538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl T arg) { 542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor *arg_out = base::internal::CallbackForward(arg); 55ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl closure.Run(); 565f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner} 575f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 585f9e272e632e951b1efe824cd16acb4d96077930Chris Lattnervoid SetSyncStatusAndUrl(const base::Closure& closure, 596e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer SyncStatusCode* status_out, 60ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl storage::FileSystemURL* url_out, 616e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer SyncStatusCode status, 626e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer const storage::FileSystemURL& url) { 635f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner *status_out = status; 645f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner *url_out = url; 656e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer closure.Run(); 66ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl} 67ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl 682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor} // namespace 692cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorclass DriveBackendSyncTest : public testing::Test, 7112b1c7615d4f9a2edc544be499f895f16ac100edChris Lattner public LocalFileSyncService::Observer, 722cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor public RemoteFileSyncService::Observer { 733397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl public: 74a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl DriveBackendSyncTest() 7589eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor pending_remote_changes_(0), 772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor pending_local_changes_(0) {} 782cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual ~DriveBackendSyncTest() {} 798538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 802cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void SetUp() OVERRIDE { 8189eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis ASSERT_TRUE(base_dir_.CreateUniqueTempDir()); 828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default())); 832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor io_task_runner_ = content::BrowserThread::GetMessageLoopProxyForThread( 852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor content::BrowserThread::IO); 862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor scoped_refptr<base::SequencedWorkerPool> worker_pool( 872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor content::BrowserThread::GetBlockingPool()); 882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_task_runner_ = 892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_pool->GetSequenceToken(), 912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 922cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor file_task_runner_ = content::BrowserThread::GetMessageLoopProxyForThread( 932cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor content::BrowserThread::FILE); 943397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl scoped_refptr<base::SequencedTaskRunner> drive_task_runner = 952cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 962cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_pool->GetSequenceToken(), 972cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 992cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor RegisterSyncableFileSystem(); 1008538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl local_sync_service_ = LocalFileSyncService::CreateForTesting( 1012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor &profile_, in_memory_env_.get()); 1022cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_sync_service_->AddChangeObserver(this); 1033397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor scoped_ptr<drive::FakeDriveService> 1058538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl drive_service(new drive::FakeDriveService); 1062cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor drive_service->Initialize("test@example.com"); 1072cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor ASSERT_TRUE(drive::test_util::SetUpTestEntries(drive_service.get())); 1083397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump scoped_ptr<drive::DriveUploaderInterface> uploader( 1108538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl new drive::DriveUploader(drive_service.get(), 1112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor file_task_runner_.get())); 1122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1133397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl fake_drive_service_helper_.reset(new FakeDriveServiceHelper( 114df1550fc59b51681d37225934fe4e3acac321621Richard Smith drive_service.get(), uploader.get(), 115df1550fc59b51681d37225934fe4e3acac321621Richard Smith kSyncRootFolderTitle)); 1168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_.reset( 1182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor new SyncEngine(base::ThreadTaskRunnerHandle::Get(), // ui_task_runner 1193397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl worker_task_runner_.get(), 120df1550fc59b51681d37225934fe4e3acac321621Richard Smith drive_task_runner.get(), 1218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base_dir_.path(), 1222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor NULL, // task_logger 1232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor NULL, // notification_manager 1243397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl NULL, // extension_service 1251eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump NULL, // signin_manager 1261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump NULL, // token_service 1278538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl NULL, // request_context 1282cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor scoped_ptr<SyncEngine::DriveServiceFactory>(), 1292cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor in_memory_env_.get())); 1303397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl remote_sync_service_->AddServiceObserver(this); 1312cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_->InitializeForTesting( 1322cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor drive_service.PassAs<drive::DriveServiceInterface>(), 1330953e767ff7817f97b3ab20896b229891eeff45bJohn McCall uploader.Pass(), 1342cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor scoped_ptr<SyncWorkerInterface>()); 1352cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_->SetSyncEnabled(true); 1363397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1372cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_sync_service_->SetLocalChangeProcessor(remote_sync_service_.get()); 1382cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_->SetRemoteChangeProcessor(local_sync_service_.get()); 1398538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 1402cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1412cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void TearDown() OVERRIDE { 1423397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl typedef std::map<std::string, CannedSyncableFileSystem*>::iterator iterator; 1432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor for (iterator itr = file_systems_.begin(); 1448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl itr != file_systems_.end(); ++itr) { 1452cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor itr->second->TearDown(); 1462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor delete itr->second; 1473397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1482cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor file_systems_.clear(); 1497e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor 1507e7eb3da052a6d80ddf2377cab0384c798f73f75Douglas Gregor local_sync_service_->Shutdown(); 151c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor 1528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl fake_drive_service_helper_.reset(); 1532cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor local_sync_service_.reset(); 1542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_.reset(); 1553397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor content::RunAllBlockingPoolTasksUntilIdle(); 1572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor RevokeSyncableFileSystem(); 158e86d78cf4754a6aef2cf9a33d847aa15338e276fBob Wilson } 1598538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1602cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor virtual void OnRemoteChangeQueueUpdated(int64 pending_changes_hint) OVERRIDE { 1612cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor pending_remote_changes_ = pending_changes_hint; 1623397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1632cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1648538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl virtual void OnLocalChangeAvailable(int64 pending_changes_hint) OVERRIDE { 1652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor pending_local_changes_ = pending_changes_hint; 1662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 1673397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor protected: 169264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola storage::FileSystemURL CreateURL(const std::string& app_id, 170264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola const base::FilePath::StringType& path) { 171a49218e17bcbb1acde0245773173e2c0c42f4f19Eli Friedman return CreateURL(app_id, base::FilePath(path)); 172425ef72306d4ff6b3698b744353e5f0e56b4b884Rafael Espindola } 173ab8bbf4ebd3e3e6eab913cb044772a62b7581941Douglas Gregor 174264ba48dc98f3f843935a485d5b086f7e0fdc4f1Rafael Espindola storage::FileSystemURL CreateURL(const std::string& app_id, 175f85e193739c953358c865005855253af4f68a497John McCall const base::FilePath& path) { 1762cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id); 1772cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor return CreateSyncableFileSystemURL(origin, path); 1783397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 1792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 1808538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl bool GetAppRootFolderID(const std::string& app_id, 1812cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string* folder_id) { 1822cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::RunLoop run_loop; 1833397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl bool success = false; 1842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor FileTracker tracker; 1852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor PostTaskAndReplyWithResult( 1862cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor worker_task_runner_.get(), 1872cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor FROM_HERE, 1882cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Bind(&MetadataDatabase::FindAppRootTracker, 1892cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Unretained(metadata_database()), 190c938c1668b4fd12af154e965dd935a89e4801a70Douglas Gregor app_id, 19160618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl &tracker), 19260618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl base::Bind( 19360618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl &SetValueAndCallClosure<bool>, run_loop.QuitClosure(), &success)); 19460618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl run_loop.Run(); 19560618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl if (!success) 19660618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl return false; 19760618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl *folder_id = tracker.file_id(); 19860618fa7f88d5162bb5b40988b6b38d4d75d6fc6Sebastian Redl return true; 1998538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 2002cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 2012cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor std::string GetFileIDByPath(const std::string& app_id, 2023397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl const base::FilePath::StringType& path) { 203ed97649e9574b9d854fa4d6109c9333ae0993554John McCall return GetFileIDByPath(app_id, base::FilePath(path)); 2048538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 205ed97649e9574b9d854fa4d6109c9333ae0993554John McCall 206ed97649e9574b9d854fa4d6109c9333ae0993554John McCall std::string GetFileIDByPath(const std::string& app_id, 2073397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl const base::FilePath& path) { 2082cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::RunLoop run_loop; 2099763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis bool success = false; 2109763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis FileTracker tracker; 2118538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::FilePath result_path; 2122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::FilePath normalized_path = path.NormalizePathSeparators(); 2132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor PostTaskAndReplyWithResult( 2143397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl worker_task_runner_.get(), 215c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor FROM_HERE, 2168538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::Bind(&MetadataDatabase::FindNearestActiveAncestor, 2172cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Unretained(metadata_database()), 2182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor app_id, 2193397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl normalized_path, 2202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor &tracker, 2218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl &result_path), 2222cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Bind( 2232cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor &SetValueAndCallClosure<bool>, run_loop.QuitClosure(), &success)); 2243397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl run_loop.Run(); 225395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson EXPECT_TRUE(success); 2268538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(normalized_path, result_path); 227395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson return tracker.file_id(); 228395b475a4474f1c7574d927ad142ca0c7997cbcaAnders Carlsson } 229ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt 230ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt SyncStatusCode RegisterApp(const std::string& app_id) { 231ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt GURL origin = extensions::Extension::GetBaseURLFromExtensionId(app_id); 232ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt if (!ContainsKey(file_systems_, app_id)) { 233ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt CannedSyncableFileSystem* file_system = new CannedSyncableFileSystem( 234ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt origin, in_memory_env_.get(), 235ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt io_task_runner_.get(), file_task_runner_.get()); 23634b41d939a1328f484511c6002ba2456db879a29Richard Smith file_system->SetUp(CannedSyncableFileSystem::QUOTA_DISABLED); 23734b41d939a1328f484511c6002ba2456db879a29Richard Smith 23834b41d939a1328f484511c6002ba2456db879a29Richard Smith SyncStatusCode status = SYNC_STATUS_UNKNOWN; 23934b41d939a1328f484511c6002ba2456db879a29Richard Smith base::RunLoop run_loop; 24034b41d939a1328f484511c6002ba2456db879a29Richard Smith local_sync_service_->MaybeInitializeFileSystemContext( 2413397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl origin, file_system->file_system_context(), 242be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis base::Bind(&SetValueAndCallClosure<SyncStatusCode>, 2432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor run_loop.QuitClosure(), &status)); 2441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump run_loop.Run(); 2452cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, status); 2462cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 2472cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor file_system->backend()->sync_context()-> 2483397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl set_mock_notify_changes_duration_in_sec(0); 2492cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 2508538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(base::File::FILE_OK, file_system->OpenFileSystem()); 2512cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor file_systems_[app_id] = file_system; 2522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 2533397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 2542cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor SyncStatusCode status = SYNC_STATUS_UNKNOWN; 2558538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::RunLoop run_loop; 2562cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_->RegisterOrigin( 2572cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor origin, 2589d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall base::Bind(&SetValueAndCallClosure<SyncStatusCode>, 2599d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall run_loop.QuitClosure(), &status)); 2609d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall run_loop.Run(); 2619d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall return status; 2629d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall } 2639d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 2649d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall void AddLocalFolder(const std::string& app_id, 2651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const base::FilePath::StringType& path) { 2663397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 26749a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall EXPECT_EQ(base::File::FILE_OK, 26849a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall file_systems_[app_id]->CreateDirectory( 26949a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall CreateURL(app_id, path))); 2708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl } 27149a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall 27249a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall void AddOrUpdateLocalFile(const std::string& app_id, 27349a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall const base::FilePath::StringType& path, 274c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor const std::string& content) { 275c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor storage::FileSystemURL url(CreateURL(app_id, path)); 276c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 277c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor EXPECT_EQ(base::File::FILE_OK, file_systems_[app_id]->CreateFile(url)); 278c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor int64 bytes_written = file_systems_[app_id]->WriteString(url, content); 279c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor EXPECT_EQ(static_cast<int64>(content.size()), bytes_written); 280c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor base::RunLoop().RunUntilIdle(); 281c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor } 2823397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 2832cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor void UpdateLocalFile(const std::string& app_id, 284be191100e034b23a3e13053757a57b7f5068c24aArgyrios Kyrtzidis const base::FilePath::StringType& path, 28590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis const std::string& content) { 28690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 28790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis int64 bytes_written = file_systems_[app_id]->WriteString( 28890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis CreateURL(app_id, path), content); 28990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(static_cast<int64>(content.size()), bytes_written); 2903e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith base::RunLoop().RunUntilIdle(); 2913e4c6c4c79a03f5cb0c4671d7c282d623c6dc35eRichard Smith } 2929763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis 2939763e221e16026ddf487d2564ed349d2c874a1a1Argyrios Kyrtzidis void RemoveLocal(const std::string& app_id, 2948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl const base::FilePath::StringType& path) { 29590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 29690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis EXPECT_EQ(base::File::FILE_OK, 29790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis file_systems_[app_id]->Remove( 2983397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl CreateURL(app_id, path), 299ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis true /* recursive */)); 300ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis base::RunLoop().RunUntilIdle(); 301ae8b17f1d5d303af53db5a4f4a375ea6b9356566Argyrios Kyrtzidis } 3028538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 30390b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis SyncStatusCode ProcessLocalChange() { 30490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis SyncStatusCode status = SYNC_STATUS_UNKNOWN; 30590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis storage::FileSystemURL url; 3063397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl base::RunLoop run_loop; 30790b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis local_sync_service_->ProcessLocalChange(base::Bind( 30890b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url)); 30990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis run_loop.Run(); 31090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis return status; 31190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis } 31290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 3133397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl SyncStatusCode ProcessRemoteChange() { 31490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis SyncStatusCode status = SYNC_STATUS_UNKNOWN; 31590b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis storage::FileSystemURL url; 31690b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis base::RunLoop run_loop; 3174fb86f8c4585e53c21c847ad3de9e3b2de123cd9Chandler Carruth remote_sync_service_->ProcessRemoteChange(base::Bind( 3188538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl &SetSyncStatusAndUrl, run_loop.QuitClosure(), &status, &url)); 31990b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis run_loop.Run(); 32090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis return status; 32190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis } 3223397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 3238dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis int64 GetLargestChangeID() { 3248dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis scoped_ptr<google_apis::AboutResource> about_resource; 3258dfbd8b252ba4e6cf4b7a3422f6ef0ca21312dfeArgyrios Kyrtzidis EXPECT_EQ(google_apis::HTTP_SUCCESS, 326f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis fake_drive_service_helper()->GetAboutResource(&about_resource)); 327f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis if (!about_resource) 328f48d45e3e36c132bdee3373beec4e8b19ae3f9c4Argyrios Kyrtzidis return 0; 3298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl return about_resource->largest_change_id(); 33090b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis } 33190b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis 33290b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis void FetchRemoteChanges() { 3333397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl remote_sync_service_->OnNotificationReceived(); 33490b715e0df34eae2b50b9b43ec60828ed31dcf94Argyrios Kyrtzidis WaitForIdleWorker(); 3353acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis } 3363acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis 3373acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis SyncStatusCode ProcessChangesUntilDone() { 3383acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis int task_limit = 100; 3393acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis SyncStatusCode local_sync_status; 3403acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis SyncStatusCode remote_sync_status; 3413acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis while (true) { 3428538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::RunLoop().RunUntilIdle(); 3432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor WaitForIdleWorker(); 3442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor 3457536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor if (!task_limit--) 3467536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor return SYNC_STATUS_ABORT; 347cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor 348cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor local_sync_status = ProcessLocalChange(); 349cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor if (local_sync_status != SYNC_STATUS_OK && 350cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor local_sync_status != SYNC_STATUS_NO_CHANGE_TO_SYNC && 3517536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor local_sync_status != SYNC_STATUS_FILE_BUSY) 3527536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor return local_sync_status; 3537536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor 354075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara remote_sync_status = ProcessRemoteChange(); 355075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara if (remote_sync_status != SYNC_STATUS_OK && 356075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara remote_sync_status != SYNC_STATUS_NO_CHANGE_TO_SYNC && 357075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara remote_sync_status != SYNC_STATUS_FILE_BUSY) 358075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara return remote_sync_status; 3593397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 360465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara if (local_sync_status == SYNC_STATUS_NO_CHANGE_TO_SYNC && 3613acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis remote_sync_status == SYNC_STATUS_NO_CHANGE_TO_SYNC) { 3623acad62a239448bef0f5848b2a0d5f7dfefd3d14Argyrios Kyrtzidis { 3638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::RunLoop run_loop; 3642cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor remote_sync_service_->PromoteDemotedChanges(run_loop.QuitClosure()); 3652cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor run_loop.Run(); 3663397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 3673cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall 36831f17ecbef57b5679c017c375db330546b7b5145John McCall { 3698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::RunLoop run_loop; 3703cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall local_sync_service_->PromoteDemotedChanges(run_loop.QuitClosure()); 3713cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall run_loop.Run(); 3723397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl } 373deacbdca554298ccdf636f19c6094a8825ec6b34Douglas Gregor 3748538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl if (pending_remote_changes_ || pending_local_changes_) 375c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall continue; 376c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall 3773397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl base::RunLoop run_loop; 378c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall int64 largest_fetched_change_id = -1; 3792cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor PostTaskAndReplyWithResult( 380c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall worker_task_runner_.get(), 381446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff FROM_HERE, 382446ee4eb4fc4c705a59365252df7a5c253daafa1Steve Naroff base::Bind(&MetadataDatabase::GetLargestFetchedChangeID, 3838538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl base::Unretained(metadata_database())), 3842cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Bind(&SetValueAndCallClosure<int64>, 3852cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor run_loop.QuitClosure(), 386d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff &largest_fetched_change_id)); 3873397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl run_loop.Run(); 3881eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump if (largest_fetched_change_id != GetLargestChangeID()) { 3898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl FetchRemoteChanges(); 3902cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor continue; 3912cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor } 392a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall break; 393a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall } 394a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall } 395a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl return SYNC_STATUS_OK; 39689eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis } 397a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 398a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // Verifies local and remote files/folders are consistent. 39989eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis // This function checks: 400a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // - Each registered origin has corresponding remote folder. 401a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // - Each local file/folder has corresponding remote one. 40251bd803fbdade51d674598ed45da3d54190a656cJohn McCall // - Each remote file/folder has corresponding local one. 403a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall // TODO(tzik): Handle conflict case. i.e. allow remote file has different 40451bd803fbdade51d674598ed45da3d54190a656cJohn McCall // file content if the corresponding local file conflicts to it. 405a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall void VerifyConsistency() { 406a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall std::string sync_root_folder_id; 40751bd803fbdade51d674598ed45da3d54190a656cJohn McCall google_apis::GDataErrorCode error = 40851bd803fbdade51d674598ed45da3d54190a656cJohn McCall fake_drive_service_helper_->GetSyncRootFolderID(&sync_root_folder_id); 409a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall if (sync_root_folder_id.empty()) { 410a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_EQ(google_apis::HTTP_NOT_FOUND, error); 411a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall EXPECT_TRUE(file_systems_.empty()); 412a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall return; 41351bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 41451bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(google_apis::HTTP_SUCCESS, error); 41551bd803fbdade51d674598ed45da3d54190a656cJohn McCall 41651bd803fbdade51d674598ed45da3d54190a656cJohn McCall ScopedVector<google_apis::ResourceEntry> remote_entries; 417ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 418ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor fake_drive_service_helper_->ListFilesInFolder( 419ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor sync_root_folder_id, &remote_entries)); 420ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor std::map<std::string, const google_apis::ResourceEntry*> app_root_by_title; 421ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor for (ScopedVector<google_apis::ResourceEntry>::iterator itr = 422ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor remote_entries.begin(); 423ddf889a2ad2888f1dea573987bbe952d9912c1a0Douglas Gregor itr != remote_entries.end(); 42451bd803fbdade51d674598ed45da3d54190a656cJohn McCall ++itr) { 42551bd803fbdade51d674598ed45da3d54190a656cJohn McCall const google_apis::ResourceEntry& remote_entry = **itr; 42651bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_FALSE(ContainsKey(app_root_by_title, remote_entry.title())); 42751bd803fbdade51d674598ed45da3d54190a656cJohn McCall app_root_by_title[remote_entry.title()] = *itr; 42851bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 42951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 43051bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (std::map<std::string, CannedSyncableFileSystem*>::const_iterator itr = 43151bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_systems_.begin(); 43251bd803fbdade51d674598ed45da3d54190a656cJohn McCall itr != file_systems_.end(); ++itr) { 43351bd803fbdade51d674598ed45da3d54190a656cJohn McCall const std::string& app_id = itr->first; 43451bd803fbdade51d674598ed45da3d54190a656cJohn McCall SCOPED_TRACE(testing::Message() << "Verifying app: " << app_id); 43551bd803fbdade51d674598ed45da3d54190a656cJohn McCall CannedSyncableFileSystem* file_system = itr->second; 43651bd803fbdade51d674598ed45da3d54190a656cJohn McCall ASSERT_TRUE(ContainsKey(app_root_by_title, app_id)); 43751bd803fbdade51d674598ed45da3d54190a656cJohn McCall VerifyConsistencyForFolder( 43851bd803fbdade51d674598ed45da3d54190a656cJohn McCall app_id, base::FilePath(), 43951bd803fbdade51d674598ed45da3d54190a656cJohn McCall app_root_by_title[app_id]->resource_id(), 44051bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system); 44151bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 442b6ab6c1ca733fda2302a1c5066bdfc6218c89e41Abramo Bagnara } 44351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 44451bd803fbdade51d674598ed45da3d54190a656cJohn McCall void VerifyConsistencyForFolder(const std::string& app_id, 44551bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::FilePath& path, 44651bd803fbdade51d674598ed45da3d54190a656cJohn McCall const std::string& folder_id, 44751bd803fbdade51d674598ed45da3d54190a656cJohn McCall CannedSyncableFileSystem* file_system) { 44851bd803fbdade51d674598ed45da3d54190a656cJohn McCall SCOPED_TRACE(testing::Message() << "Verifying folder: " << path.value()); 44951bd803fbdade51d674598ed45da3d54190a656cJohn McCall 45051bd803fbdade51d674598ed45da3d54190a656cJohn McCall ScopedVector<google_apis::ResourceEntry> remote_entries; 45151bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(google_apis::HTTP_SUCCESS, 45251bd803fbdade51d674598ed45da3d54190a656cJohn McCall fake_drive_service_helper_->ListFilesInFolder( 45351bd803fbdade51d674598ed45da3d54190a656cJohn McCall folder_id, &remote_entries)); 45451bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::map<std::string, const google_apis::ResourceEntry*> 45551bd803fbdade51d674598ed45da3d54190a656cJohn McCall remote_entry_by_title; 45651bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (size_t i = 0; i < remote_entries.size(); ++i) { 45751bd803fbdade51d674598ed45da3d54190a656cJohn McCall google_apis::ResourceEntry* remote_entry = remote_entries[i]; 45851bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_FALSE(ContainsKey(remote_entry_by_title, remote_entry->title())) 45951bd803fbdade51d674598ed45da3d54190a656cJohn McCall << "title: " << remote_entry->title(); 46051bd803fbdade51d674598ed45da3d54190a656cJohn McCall remote_entry_by_title[remote_entry->title()] = remote_entry; 46151bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 46251bd803fbdade51d674598ed45da3d54190a656cJohn McCall 46351bd803fbdade51d674598ed45da3d54190a656cJohn McCall storage::FileSystemURL url(CreateURL(app_id, path)); 46451bd803fbdade51d674598ed45da3d54190a656cJohn McCall FileEntryList local_entries; 46551bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(base::File::FILE_OK, 46651bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system->ReadDirectory(url, &local_entries)); 46751bd803fbdade51d674598ed45da3d54190a656cJohn McCall for (FileEntryList::iterator itr = local_entries.begin(); 46851bd803fbdade51d674598ed45da3d54190a656cJohn McCall itr != local_entries.end(); 46951bd803fbdade51d674598ed45da3d54190a656cJohn McCall ++itr) { 47051bd803fbdade51d674598ed45da3d54190a656cJohn McCall const storage::DirectoryEntry& local_entry = *itr; 47151bd803fbdade51d674598ed45da3d54190a656cJohn McCall storage::FileSystemURL entry_url( 47251bd803fbdade51d674598ed45da3d54190a656cJohn McCall CreateURL(app_id, path.Append(local_entry.name))); 47351bd803fbdade51d674598ed45da3d54190a656cJohn McCall std::string title = 47451bd803fbdade51d674598ed45da3d54190a656cJohn McCall storage::VirtualPath::BaseName(entry_url.path()).AsUTF8Unsafe(); 475796aa443ab5ed036f42ef33fed629e1b4b34871bAbramo Bagnara SCOPED_TRACE(testing::Message() << "Verifying entry: " << title); 476796aa443ab5ed036f42ef33fed629e1b4b34871bAbramo Bagnara 477dab60ad68a3a98d687305941a3852e793705f945Douglas Gregor ASSERT_TRUE(ContainsKey(remote_entry_by_title, title)); 47851bd803fbdade51d674598ed45da3d54190a656cJohn McCall const google_apis::ResourceEntry& remote_entry = 47951bd803fbdade51d674598ed45da3d54190a656cJohn McCall *remote_entry_by_title[title]; 48051bd803fbdade51d674598ed45da3d54190a656cJohn McCall if (local_entry.is_directory) { 48151bd803fbdade51d674598ed45da3d54190a656cJohn McCall ASSERT_TRUE(remote_entry.is_folder()); 48251bd803fbdade51d674598ed45da3d54190a656cJohn McCall VerifyConsistencyForFolder(app_id, entry_url.path(), 48351bd803fbdade51d674598ed45da3d54190a656cJohn McCall remote_entry.resource_id(), 48451bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_system); 48551bd803fbdade51d674598ed45da3d54190a656cJohn McCall } else { 48651bd803fbdade51d674598ed45da3d54190a656cJohn McCall ASSERT_TRUE(remote_entry.is_file()); 487ed97649e9574b9d854fa4d6109c9333ae0993554John McCall VerifyConsistencyForFile(app_id, entry_url.path(), 488ed97649e9574b9d854fa4d6109c9333ae0993554John McCall remote_entry.resource_id(), 489ed97649e9574b9d854fa4d6109c9333ae0993554John McCall file_system); 49051bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 49151bd803fbdade51d674598ed45da3d54190a656cJohn McCall remote_entry_by_title.erase(title); 49251bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 49351bd803fbdade51d674598ed45da3d54190a656cJohn McCall 494cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall EXPECT_TRUE(remote_entry_by_title.empty()); 495cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall } 496cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall 49751bd803fbdade51d674598ed45da3d54190a656cJohn McCall void VerifyConsistencyForFile(const std::string& app_id, 49851bd803fbdade51d674598ed45da3d54190a656cJohn McCall const base::FilePath& path, 499cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall const std::string& file_id, 500cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall CannedSyncableFileSystem* file_system) { 501cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall storage::FileSystemURL url(CreateURL(app_id, path)); 502cfb708c354e2f30ccc5cba9d644650f408a1ec3eJohn McCall std::string file_content; 50351bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(google_apis::HTTP_SUCCESS, 50451bd803fbdade51d674598ed45da3d54190a656cJohn McCall fake_drive_service_helper_->ReadFile(file_id, &file_content)); 50551bd803fbdade51d674598ed45da3d54190a656cJohn McCall EXPECT_EQ(base::File::FILE_OK, 506a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall file_system->VerifyFile(url, file_content)); 507ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt } 508ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt 509ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt size_t CountApp() { 510ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt return file_systems_.size(); 511ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt } 512ca63c200346c0ca9e00194ec6e34a5a7b0ed9321Sean Hunt 51334b41d939a1328f484511c6002ba2456db879a29Richard Smith size_t CountLocalFile(const std::string& app_id) { 51434b41d939a1328f484511c6002ba2456db879a29Richard Smith if (!ContainsKey(file_systems_, app_id)) 51534b41d939a1328f484511c6002ba2456db879a29Richard Smith return 0; 51651bd803fbdade51d674598ed45da3d54190a656cJohn McCall 51751bd803fbdade51d674598ed45da3d54190a656cJohn McCall CannedSyncableFileSystem* file_system = file_systems_[app_id]; 518a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall std::stack<base::FilePath> folders; 51951bd803fbdade51d674598ed45da3d54190a656cJohn McCall folders.push(base::FilePath()); // root folder 52051bd803fbdade51d674598ed45da3d54190a656cJohn McCall 521a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall size_t result = 1; 5229d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall while (!folders.empty()) { 5239d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall storage::FileSystemURL url(CreateURL(app_id, folders.top())); 5249d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall folders.pop(); 5259d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 5269d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall FileEntryList entries; 5279d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall EXPECT_EQ(base::File::FILE_OK, 5289d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall file_system->ReadDirectory(url, &entries)); 5299d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall for (FileEntryList::iterator itr = entries.begin(); 5309d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall itr != entries.end(); ++itr) { 5319d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall ++result; 5329d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall if (itr->is_directory) 5339d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall folders.push(url.path().Append(itr->name)); 5349d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall } 5359d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall } 5369d156a7b1b2771e191f2f5a45a7b7a694129463bJohn McCall 53751bd803fbdade51d674598ed45da3d54190a656cJohn McCall return result; 53851bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 539a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall 54049a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall void VerifyLocalFile(const std::string& app_id, 54149a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall const base::FilePath::StringType& path, 54249a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall const std::string& content) { 54349a832bd499d6f61c23655f1fac99f0dd229756eJohn McCall SCOPED_TRACE(testing::Message() << "Verifying local file: " 544c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor << "app_id = " << app_id 545c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor << ", path = " << path); 546c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 547c3069d618f4661d923cb1b5c4525b082fce73b04Douglas Gregor EXPECT_EQ(base::File::FILE_OK, 54851bd803fbdade51d674598ed45da3d54190a656cJohn McCall file_systems_[app_id]->VerifyFile( 54951bd803fbdade51d674598ed45da3d54190a656cJohn McCall CreateURL(app_id, path), content)); 550833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall } 551833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall 552833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall void VerifyLocalFolder(const std::string& app_id, 553833ca991c1bfc967f0995974ca86f66ba1f666b5John McCall const base::FilePath::StringType& path) { 55444f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis SCOPED_TRACE(testing::Message() << "Verifying local file: " 55544f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis << "app_id = " << app_id 556a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall << ", path = " << path); 557075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara ASSERT_TRUE(ContainsKey(file_systems_, app_id)); 558075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara EXPECT_EQ(base::File::FILE_OK, 559075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara file_systems_[app_id]->DirectoryExists(CreateURL(app_id, path))); 560075f8f1b6bed4d1b224c74f87508534cc6392ce6Abramo Bagnara } 561465d41b92b2c862f3062c412a0538db65c6a2661Abramo Bagnara 562e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara size_t CountMetadata() { 5639e876876afc13aa671cc11a17c19907c599b9ab9Douglas Gregor size_t count = 0; 564a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall base::RunLoop run_loop; 5653cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall PostTaskAndReplyWithResult( 5663cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall worker_task_runner_.get(), 5673cb0ebd5f76abcb776f7cb4062bd79e3268c0dc4John McCall FROM_HERE, 5684714c12a1ab759156b78be8f109ea4c12213af57Douglas Gregor base::Bind(&MetadataDatabase::CountFileMetadata, 569e4da7a034a2fcf4b14d0bcc28d05de0878159061Abramo Bagnara base::Unretained(metadata_database())), 5702494dd024b392b8def58bf067cc94b51c214cf77Douglas Gregor base::Bind( 57151bd803fbdade51d674598ed45da3d54190a656cJohn McCall &SetValueAndCallClosure<size_t>, run_loop.QuitClosure(), &count)); 572a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall run_loop.Run(); 57333500955d731c73717af52088b7fc0e7a85681e7John McCall return count; 57433500955d731c73717af52088b7fc0e7a85681e7John McCall } 57533500955d731c73717af52088b7fc0e7a85681e7John McCall 57694fdffa4a572fc14ac296f5f1aae9db3734c72f1Douglas Gregor size_t CountTracker() { 57733500955d731c73717af52088b7fc0e7a85681e7John McCall size_t count = 0; 57833500955d731c73717af52088b7fc0e7a85681e7John McCall base::RunLoop run_loop; 57933500955d731c73717af52088b7fc0e7a85681e7John McCall PostTaskAndReplyWithResult( 58033500955d731c73717af52088b7fc0e7a85681e7John McCall worker_task_runner_.get(), 58144f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis FROM_HERE, 58244f8c37e378f716e8cbb600e3800f437cf58f9e5Argyrios Kyrtzidis base::Bind(&MetadataDatabase::CountFileTracker, 58333500955d731c73717af52088b7fc0e7a85681e7John McCall base::Unretained(metadata_database())), 5847536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor base::Bind( 5857536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor &SetValueAndCallClosure<size_t>, run_loop.QuitClosure(), &count)); 5867536dd5e6c99584481b7dab68b7e7d8df9c54054Douglas Gregor run_loop.Run(); 58751bd803fbdade51d674598ed45da3d54190a656cJohn McCall return count; 58851bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 589c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall 590c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall drive::FakeDriveService* fake_drive_service() { 591c12c5bba6ceb6acd4e51e7a0fc03257da9cfd44eJohn McCall return static_cast<drive::FakeDriveService*>( 59254e14c4db764c0636160d26c5bbf491637c83a76John McCall remote_sync_service_->drive_service_.get()); 59354e14c4db764c0636160d26c5bbf491637c83a76John McCall } 59454e14c4db764c0636160d26c5bbf491637c83a76John McCall 59554e14c4db764c0636160d26c5bbf491637c83a76John McCall FakeDriveServiceHelper* fake_drive_service_helper() { 596a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall return fake_drive_service_helper_.get(); 59751bd803fbdade51d674598ed45da3d54190a656cJohn McCall } 59851bd803fbdade51d674598ed45da3d54190a656cJohn McCall 599a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall void WaitForIdleWorker() { 600a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall base::RunLoop run_loop; 6014dcf151a555ff51e4d643e8e6eeb80f121d11d1bChris Lattner worker_task_runner_->PostTask( 602a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl FROM_HERE, 6032cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Bind(&SyncWorker::CallOnIdleForTesting, 6042cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor base::Unretained(sync_worker()), 605b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner RelayCallbackToCurrentThread( 606b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner FROM_HERE, 60789eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis run_loop.QuitClosure()))); 608b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner run_loop.Run(); 609b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 610b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 611b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner private: 612b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner SyncWorker* sync_worker() { 613b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return static_cast<SyncWorker*>(remote_sync_service_->sync_worker_.get()); 614b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 615b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 616b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner // MetadataDatabase is normally used on the worker thread. 617b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner // Use this only when there is no task running on the worker. 618b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner MetadataDatabase* metadata_database() { 619b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner return sync_worker()->context_->metadata_database_.get(); 620b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner } 621b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 62289eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis content::TestBrowserThreadBundle thread_bundle_; 623b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 624b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner base::ScopedTempDir base_dir_; 625b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner scoped_ptr<leveldb::Env> in_memory_env_; 626b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner TestingProfile profile_; 627b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 6280558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_ptr<SyncEngine> remote_sync_service_; 6290558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_ptr<LocalFileSyncService> local_sync_service_; 6300558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 63189eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis int64 pending_remote_changes_; 6328538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl int64 pending_local_changes_; 6330558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6340558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_; 6350558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::map<std::string, CannedSyncableFileSystem*> file_systems_; 6360558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6370558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6380558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; 6390558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_refptr<base::SequencedTaskRunner> worker_task_runner_; 6400558df2da807646e65d4fa290f4e92114af1a746Chris Lattner scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; 6410558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6420558df2da807646e65d4fa290f4e92114af1a746Chris Lattner DISALLOW_COPY_AND_ASSIGN(DriveBackendSyncTest); 6430558df2da807646e65d4fa290f4e92114af1a746Chris Lattner}; 6440558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6450558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST_F(DriveBackendSyncTest, LocalToRemoteBasicTest) { 6460558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string app_id = "example"; 6470558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6480558df2da807646e65d4fa290f4e92114af1a746Chris Lattner RegisterApp(app_id); 6490558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddOrUpdateLocalFile(app_id, FPL("file"), "abcde"); 6500558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6510558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 6520558df2da807646e65d4fa290f4e92114af1a746Chris Lattner VerifyConsistency(); 6530558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6540558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(1u, CountApp()); 6550558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(2u, CountLocalFile(app_id)); 6560558df2da807646e65d4fa290f4e92114af1a746Chris Lattner VerifyLocalFile(app_id, FPL("file"), "abcde"); 6570558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6580558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(3u, CountMetadata()); 6590558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(3u, CountTracker()); 6600558df2da807646e65d4fa290f4e92114af1a746Chris Lattner} 6610558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6620558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST_F(DriveBackendSyncTest, RemoteToLocalBasicTest) { 6630558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string app_id = "example"; 6640558df2da807646e65d4fa290f4e92114af1a746Chris Lattner RegisterApp(app_id); 6650558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6660558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string app_root_folder_id; 6670558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_TRUE(GetAppRootFolderID(app_id, &app_root_folder_id)); 6680558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6690558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string file_id; 6700558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 6710558df2da807646e65d4fa290f4e92114af1a746Chris Lattner fake_drive_service_helper()->AddFile( 6720558df2da807646e65d4fa290f4e92114af1a746Chris Lattner app_root_folder_id, "file", "abcde", &file_id)); 6730558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6740558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 6750558df2da807646e65d4fa290f4e92114af1a746Chris Lattner VerifyConsistency(); 6760558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6770558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(1u, CountApp()); 6780558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(2u, CountLocalFile(app_id)); 6790558df2da807646e65d4fa290f4e92114af1a746Chris Lattner VerifyLocalFile(app_id, FPL("file"), "abcde"); 6800558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6810558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(3u, CountMetadata()); 6820558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(3u, CountTracker()); 683f111d935722ed488144600cea5ed03a6b5069e8fPeter Collingbourne} 6840558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6850558df2da807646e65d4fa290f4e92114af1a746Chris LattnerTEST_F(DriveBackendSyncTest, LocalFileUpdateTest) { 6860558df2da807646e65d4fa290f4e92114af1a746Chris Lattner std::string app_id = "example"; 6870558df2da807646e65d4fa290f4e92114af1a746Chris Lattner const base::FilePath::StringType kPath(FPL("file")); 6880558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6890558df2da807646e65d4fa290f4e92114af1a746Chris Lattner RegisterApp(app_id); 6900558df2da807646e65d4fa290f4e92114af1a746Chris Lattner AddOrUpdateLocalFile(app_id, kPath, "abcde"); 6910558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6920558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 6930558df2da807646e65d4fa290f4e92114af1a746Chris Lattner VerifyConsistency(); 6940558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6950558df2da807646e65d4fa290f4e92114af1a746Chris Lattner UpdateLocalFile(app_id, kPath, "1234567890"); 6960558df2da807646e65d4fa290f4e92114af1a746Chris Lattner 6970558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 698eb7f96141f754150a92433286fa385910a22f494Sam Weinig VerifyConsistency(); 699eb7f96141f754150a92433286fa385910a22f494Sam Weinig 700eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_EQ(1u, CountApp()); 701eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_EQ(2u, CountLocalFile(app_id)); 702eb7f96141f754150a92433286fa385910a22f494Sam Weinig VerifyLocalFile(app_id, FPL("file"), "1234567890"); 703eb7f96141f754150a92433286fa385910a22f494Sam Weinig 704eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_EQ(3u, CountMetadata()); 705eb7f96141f754150a92433286fa385910a22f494Sam Weinig EXPECT_EQ(3u, CountTracker()); 706eb7f96141f754150a92433286fa385910a22f494Sam Weinig} 707b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 708b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorTEST_F(DriveBackendSyncTest, RemoteFileUpdateTest) { 709b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string app_id = "example"; 710b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 711b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor RegisterApp(app_id); 712b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string remote_file_id; 713b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string app_root_folder_id; 714b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_TRUE(GetAppRootFolderID(app_id, &app_root_folder_id)); 715b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 716b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor fake_drive_service_helper()->AddFile( 717b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor app_root_folder_id, "file", "abcde", &remote_file_id)); 718b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 719b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 720b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyConsistency(); 721b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 722b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 723b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor fake_drive_service_helper()->UpdateFile( 724b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor remote_file_id, "1234567890")); 725b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 726b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 727b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyConsistency(); 728b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 729b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(1u, CountApp()); 730b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(2u, CountLocalFile(app_id)); 731b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyLocalFile(app_id, FPL("file"), "1234567890"); 732e08ce650a2b02410eddd1f60a4aa6b3d4be71e73Peter Collingbourne 7330558df2da807646e65d4fa290f4e92114af1a746Chris Lattner EXPECT_EQ(3u, CountMetadata()); 734b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(3u, CountTracker()); 7351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 736a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl 737b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerTEST_F(DriveBackendSyncTest, LocalFileDeletionTest) { 738b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string app_id = "example"; 7391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const base::FilePath::StringType path(FPL("file")); 7408538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 7418538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl RegisterApp(app_id); 7421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump AddOrUpdateLocalFile(app_id, path, "abcde"); 7433397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 744f29f0a28c4d9599b389bbb6d186e14af753dc5a3Sebastian Redl EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 74551e774d42269e3b22d746184c0b9076fc13b32e6Zhongxing Xu VerifyConsistency(); 74631d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor 747b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner RemoveLocal(app_id, path); 748b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 749b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 750ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor VerifyConsistency(); 751b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 752b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(1u, CountApp()); 753b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(1u, CountLocalFile(app_id)); 754b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 755b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(2u, CountMetadata()); 756b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(2u, CountTracker()); 75749b96d1a382ae9f31456166f1a734d3f7f30b992Argyrios Kyrtzidis} 758b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 759b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerTEST_F(DriveBackendSyncTest, RemoteFileDeletionTest) { 760b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string app_id = "example"; 761b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner const base::FilePath::StringType path(FPL("file")); 7627f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 7637f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor RegisterApp(app_id); 7644fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor AddOrUpdateLocalFile(app_id, path, "abcde"); 765b81c17092039f39be60e9656a37cffbdf2e2c783Douglas Gregor 7665b4ec636637c9d876102240127cc0dca9280e83aTed Kremenek EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 7676a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor VerifyConsistency(); 768a93e3b5bde9f0a7b59215f19f176f7d69881b81cSebastian Redl 769320198303df7c16950d83ae79c3f702b84badcf7Fariborz Jahanian std::string file_id = GetFileIDByPath(app_id, path); 770b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 771b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor fake_drive_service_helper()->DeleteResource(file_id)); 772b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 773b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 774b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyConsistency(); 775b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 776b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(1u, CountApp()); 777b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(1u, CountLocalFile(app_id)); 778b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 779b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(2u, CountMetadata()); 780b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(2u, CountTracker()); 78184bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne} 782cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 783837593fec8389eea3143920d7f2180b079b609e8Douglas GregorTEST_F(DriveBackendSyncTest, RemoteRenameTest) { 78484bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne std::string app_id = "example"; 78584bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter Collingbourne const base::FilePath::StringType path(FPL("file")); 786ebcbe1d3dc7d4f0c1f540a632fa0684dd0a857d5Sean Hunt 787d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor RegisterApp(app_id); 788d8bba9c15230d2b1b3893e272106aa79efc50251Douglas Gregor AddOrUpdateLocalFile(app_id, path, "abcde"); 789837593fec8389eea3143920d7f2180b079b609e8Douglas Gregor 790837593fec8389eea3143920d7f2180b079b609e8Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 791cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyConsistency(); 792b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 7932f4efd10c805cb779618c1a22a35eb07b5043c4eChris Lattner std::string file_id = GetFileIDByPath(app_id, path); 794b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 795b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner fake_drive_service_helper()->RenameResource( 796b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner file_id, "renamed_file")); 797f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 7981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 799b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner VerifyConsistency(); 8002f4efd10c805cb779618c1a22a35eb07b5043c4eChris Lattner 801b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(1u, CountApp()); 802b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(2u, CountLocalFile(app_id)); 803b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner VerifyLocalFile(app_id, FPL("renamed_file"), "abcde"); 804b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 80561d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor EXPECT_EQ(3u, CountMetadata()); 80661d60ee6aa0a5ded0ddcf48679673b37506a1895Douglas Gregor EXPECT_EQ(3u, CountTracker()); 807b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner} 808b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 809b145b1e9de866e79fb386e4a074dc0b41853acf3Chris LattnerTEST_F(DriveBackendSyncTest, RemoteRenameAndRevertTest) { 810b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string app_id = "example"; 811b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner const base::FilePath::StringType path(FPL("file")); 812b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 813b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner RegisterApp(app_id); 814b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner AddOrUpdateLocalFile(app_id, path, "abcde"); 815b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 816b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 817b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner VerifyConsistency(); 818b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 819b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner std::string file_id = GetFileIDByPath(app_id, path); 820b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 821b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner fake_drive_service_helper()->RenameResource( 822b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner file_id, "renamed_file")); 823b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 824b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner FetchRemoteChanges(); 825b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 826b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 827a53d2cbe37e4be0d95b9d3e09f74eafae31fc940John McCall fake_drive_service_helper()->RenameResource( 828d1b3c2dd5bc1f3103bee6137957aa7c5f8f2f0bcSteve Naroff file_id, base::FilePath(path).AsUTF8Unsafe())); 829b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 830b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor FetchRemoteChanges(); 831b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 832b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 833b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyConsistency(); 834b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 835b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(1u, CountApp()); 836b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(2u, CountLocalFile(app_id)); 837b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyLocalFile(app_id, FPL("file"), "abcde"); 838b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 839b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(3u, CountMetadata()); 840b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(3u, CountTracker()); 841b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 842b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 843b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorTEST_F(DriveBackendSyncTest, ReorganizeToOtherFolder) { 8440ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::string app_id = "example"; 8450ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner const base::FilePath::StringType path(FPL("file")); 8460ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 8470ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner RegisterApp(app_id); 8480ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner AddLocalFolder(app_id, FPL("folder_src")); 8490ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner AddLocalFolder(app_id, FPL("folder_dest")); 8500ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner AddOrUpdateLocalFile(app_id, FPL("folder_src/file"), "abcde"); 8510ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 8520ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 8530ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner VerifyConsistency(); 8540ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 8550ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::string file_id = GetFileIDByPath(app_id, FPL("folder_src/file")); 8560ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::string src_folder_id = GetFileIDByPath(app_id, FPL("folder_src")); 8570ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner std::string dest_folder_id = GetFileIDByPath(app_id, FPL("folder_dest")); 8580ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 8590ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner fake_drive_service_helper()->RemoveResourceFromDirectory( 8600ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner src_folder_id, file_id)); 8610ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 862b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner fake_drive_service_helper()->AddResourceToDirectory( 863b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner dest_folder_id, file_id)); 8640ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 865b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 8660ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner VerifyConsistency(); 8670ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner 8680ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(1u, CountApp()); 8690ff8cda4442cff571aba1be91dd16f64a0bf16aaChris Lattner EXPECT_EQ(4u, CountLocalFile(app_id)); 870b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyLocalFolder(app_id, FPL("folder_dest")); 871b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyLocalFile(app_id, FPL("folder_dest/file"), "abcde"); 872b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 873b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(5u, CountMetadata()); 874b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(5u, CountTracker()); 875b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor} 876b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 877b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas GregorTEST_F(DriveBackendSyncTest, ReorganizeToOtherApp) { 878b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string src_app_id = "src_app"; 879b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string dest_app_id = "dest_app"; 880b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 881b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor RegisterApp(src_app_id); 882b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor RegisterApp(dest_app_id); 883b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 884b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor AddLocalFolder(src_app_id, FPL("folder_src")); 885b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor AddLocalFolder(dest_app_id, FPL("folder_dest")); 886b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor AddOrUpdateLocalFile(src_app_id, FPL("folder_src/file"), "abcde"); 887b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 888b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 889b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor VerifyConsistency(); 890b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor 891b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string file_id = GetFileIDByPath(src_app_id, FPL("folder_src/file")); 892b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string src_folder_id = GetFileIDByPath(src_app_id, FPL("folder_src")); 893b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor std::string dest_folder_id = GetFileIDByPath(dest_app_id, FPL("folder_dest")); 894b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 895b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor fake_drive_service_helper()->RemoveResourceFromDirectory( 896b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor src_folder_id, file_id)); 897b6c2b3f658df5525b9c0af606b64d304e7416c2fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 898a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor fake_drive_service_helper()->AddResourceToDirectory( 899a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor dest_folder_id, file_id)); 900a72d8c4556fbdfca2c9e101722812861fcbdde12Douglas Gregor 9014800a5c79023271408af49797e09be32aca93232Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 902f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth VerifyConsistency(); 9034800a5c79023271408af49797e09be32aca93232Douglas Gregor 9044800a5c79023271408af49797e09be32aca93232Douglas Gregor EXPECT_EQ(2u, CountApp()); 9054800a5c79023271408af49797e09be32aca93232Douglas Gregor EXPECT_EQ(2u, CountLocalFile(src_app_id)); 906b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(3u, CountLocalFile(dest_app_id)); 907b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner VerifyLocalFile(dest_app_id, FPL("folder_dest/file"), "abcde"); 908b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner 909b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(6u, CountMetadata()); 910b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner EXPECT_EQ(6u, CountTracker()); 911e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor} 912e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 9131eb4433ac451dc16f4133a88af2d002ac26c58efMike StumpTEST_F(DriveBackendSyncTest, ReorganizeToUnmanagedArea) { 914e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::string app_id = "example"; 915e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 916e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor RegisterApp(app_id); 917e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 918e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor AddLocalFolder(app_id, FPL("folder_src")); 919e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("folder_src/file_orphaned"), "abcde"); 920e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("folder_src/file_under_sync_root"), "123"); 9211eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump AddOrUpdateLocalFile(app_id, FPL("folder_src/file_under_drive_root"), "hoge"); 922832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor 923e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 9241eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyConsistency(); 925832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor 926e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::string file_orphaned_id = 9271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GetFileIDByPath(app_id, FPL("folder_src/file_orphaned")); 928e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::string file_under_sync_root_id = 929e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor GetFileIDByPath(app_id, FPL("folder_src/file_under_sync_root")); 930832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor std::string file_under_drive_root_id = 931e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor GetFileIDByPath(app_id, FPL("folder_src/file_under_drive_root")); 932e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 9331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump std::string folder_id = GetFileIDByPath(app_id, FPL("folder_src")); 934e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor std::string sync_root_folder_id; 935e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 936e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor fake_drive_service_helper()->GetSyncRootFolderID( 9371eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump &sync_root_folder_id)); 938e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 939e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 940e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor fake_drive_service_helper()->RemoveResourceFromDirectory( 941e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor folder_id, file_orphaned_id)); 942e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 9431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump fake_drive_service_helper()->RemoveResourceFromDirectory( 944e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor folder_id, file_under_sync_root_id)); 945e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 946b145b1e9de866e79fb386e4a074dc0b41853acf3Chris Lattner fake_drive_service_helper()->RemoveResourceFromDirectory( 9473397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl folder_id, file_under_drive_root_id)); 948832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor 9498e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis EXPECT_EQ(google_apis::HTTP_SUCCESS, 9502bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor fake_drive_service_helper()->AddResourceToDirectory( 951b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor sync_root_folder_id, file_under_sync_root_id)); 952e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 953e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor fake_drive_service_helper()->AddResourceToDirectory( 954e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor fake_drive_service()->GetRootResourceId(), 95577f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl file_under_drive_root_id)); 9568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 9573397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 9583397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl VerifyConsistency(); 959e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 960e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(1u, CountApp()); 961e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(2u, CountLocalFile(app_id)); 96277f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl 96377f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl EXPECT_EQ(4u, CountMetadata()); 964e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor EXPECT_EQ(4u, CountTracker()); 9651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 966e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 9678538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlTEST_F(DriveBackendSyncTest, ReorganizeToMultipleParents) { 9688538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::string app_id = "example"; 9698538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 970e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor RegisterApp(app_id); 971e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 972832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor AddLocalFolder(app_id, FPL("parent1")); 97377f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl AddLocalFolder(app_id, FPL("parent2")); 97448d2c3f7c3ca48da05436afdc8426a245294ee65Jonathan D. Turner AddOrUpdateLocalFile(app_id, FPL("parent1/file"), "abcde"); 97548d2c3f7c3ca48da05436afdc8426a245294ee65Jonathan D. Turner 97677f4603c8b142e642300959a601ecec2b7c8e288Sebastian Redl EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 9771eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyConsistency(); 97831d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor 979b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor std::string file_id = GetFileIDByPath(app_id, FPL("parent1/file")); 980b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor std::string parent2_folder_id = GetFileIDByPath(app_id, FPL("parent2")); 981b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 9828538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl fake_drive_service_helper()->AddResourceToDirectory( 983b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor parent2_folder_id, file_id)); 984b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor 985b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 986fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer VerifyConsistency(); 9871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 988fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer EXPECT_EQ(1u, CountApp()); 989b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor EXPECT_EQ(4u, CountLocalFile(app_id)); 990aba54a95e9d5e4dc9056abec6bb70ea777c4a7bcKovarththanan Rajaratnam VerifyLocalFolder(app_id, FPL("parent1")); 9911eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyLocalFolder(app_id, FPL("parent2")); 992e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor VerifyLocalFile(app_id, FPL("parent1/file"), "abcde"); 993b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor 9948538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(5u, CountMetadata()); 995ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar EXPECT_EQ(5u, CountTracker()); 99631d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor} 99731d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor 99831d375f056447d4e2418275d4913661d3bfedb3eDouglas GregorTEST_F(DriveBackendSyncTest, ReorganizeAndRevert) { 99931d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregor std::string app_id = "example"; 1000b64c19365deab788753d29c9bc881253c3f16f37Douglas Gregor 100111a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam RegisterApp(app_id); 10028e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 10038e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis AddLocalFolder(app_id, FPL("folder")); 10048e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis AddLocalFolder(app_id, FPL("folder_temp")); 10058e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis AddOrUpdateLocalFile(app_id, FPL("folder/file"), "abcde"); 10068e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 10078e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 10088e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis VerifyConsistency(); 10098e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis 10108e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis std::string file_id = GetFileIDByPath(app_id, FPL("folder/file")); 10118e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis std::string folder_id = GetFileIDByPath(app_id, FPL("folder")); 10128e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis std::string folder_temp_id = GetFileIDByPath(app_id, FPL("folder_temp")); 10138e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 10148e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis fake_drive_service_helper()->RemoveResourceFromDirectory( 10158e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis folder_id, file_id)); 10168e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis EXPECT_EQ(google_apis::HTTP_SUCCESS, 10178e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis fake_drive_service_helper()->AddResourceToDirectory( 10188e3df4d0864f0a966c20088ca1a29c3398b7639dArgyrios Kyrtzidis folder_temp_id, file_id)); 1019f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek 1020f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek FetchRemoteChanges(); 10218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1022f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1023f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek fake_drive_service_helper()->RemoveResourceFromDirectory( 1024445e23e9b909ec8e21303c7dd82c90b72fc09ac4Douglas Gregor folder_temp_id, file_id)); 10258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(google_apis::HTTP_SUCCESS, 1026f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek fake_drive_service_helper()->AddResourceToDirectory( 1027f7a96a39958b3f919f26764777eec948b43d74bcTed Kremenek folder_id, file_id)); 10282bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor 10292bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor FetchRemoteChanges(); 10302bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor 1031a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 10320a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor VerifyConsistency(); 10330a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10340a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(1u, CountApp()); 10350a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(4u, CountLocalFile(app_id)); 10360a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor VerifyLocalFolder(app_id, FPL("folder")); 10370a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor VerifyLocalFile(app_id, FPL("folder/file"), "abcde"); 1038eb5d7b752651283de5abfcc2f91df7227582a08dChandler Carruth 10390a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(5u, CountMetadata()); 10400a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(5u, CountTracker()); 10410a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor} 10420a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10437e7fbd05a5dfdb0addfc8b5af2fcbed8c7b5fb87Peter CollingbourneTEST_F(DriveBackendSyncTest, ConflictTest_ConflictTest_AddFolder_AddFolder) { 10440a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string app_id = "example"; 1045dae4ac4fe56ec60fc93b3e3c9f51e79e682084b9Michael J. Spencer 1046dae4ac4fe56ec60fc93b3e3c9f51e79e682084b9Michael J. Spencer RegisterApp(app_id); 10470a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 10480a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10490a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 10501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 10510a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10520a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor std::string remote_folder_id; 105311a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam EXPECT_EQ(google_apis::HTTP_CREATED, 1054412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian fake_drive_service_helper()->AddFolder( 105511a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam app_root_folder_id, 1056412e798941ca64e2e6b084323915fa9aa5f6bdf3Fariborz Jahanian "conflict_to_pending_remote", &remote_folder_id)); 1057f84109ee6aeffb09366bd70c8593ce1b7818b1adFariborz Jahanian 1058c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek FetchRemoteChanges(); 1059c32647d111e516593b9ba242cad7b8ff4016c155Ted Kremenek 106074da19fc3a52d7e3005eeb7a7833859da84fd12aDouglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 10614c9d8d0eca5ca635d9a30222f690db9140e98325Fariborz Jahanian fake_drive_service_helper()->AddFolder( 10621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump app_root_folder_id, 10630a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor "conflict_to_existing_remote", &remote_folder_id)); 10640a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10650a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1066b9e7e63ae2098bc02e79c032df0a3124d09a4b4eNate Begeman VerifyConsistency(); 10670a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 1068da4b7cf09ebfd4e4098b516081fa9dae2f5c99e0Anders Carlsson EXPECT_EQ(1u, CountApp()); 10697da99b05aa9482e76b2954223b5652469004aec2Anders Carlsson EXPECT_EQ(3u, CountLocalFile(app_id)); 10707da99b05aa9482e76b2954223b5652469004aec2Anders Carlsson VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 10710a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 10726f75550e40a9177db9979fc130ce3ece026b137dDouglas Gregor 10730a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(4u, CountMetadata()); 10740a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(4u, CountTracker()); 10750a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor} 10760a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 1077ea5ce4705df0743093925585d8edc80e0d8fe3ffChris LattnerTEST_F(DriveBackendSyncTest, ConflictTest_AddFolder_DeleteFolder) { 1078ea5ce4705df0743093925585d8edc80e0d8fe3ffChris Lattner std::string app_id = "example"; 1079972d954bd216c86a961bb7f81c53af85de17c2f0Douglas Gregor 10800a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor RegisterApp(app_id); 10810a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10820a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 10830a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 10840a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10850a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1086a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner VerifyConsistency(); 1087a4d71455f0d418e16cc0c5c5aa55a3bad3494aeeChris Lattner 10880a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor // Test body starts from here. 10890a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 10901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 10910a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 10920a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 10930a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10940a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 10950a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor fake_drive_service_helper()->DeleteResource( 10960a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 10970a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 10980a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor FetchRemoteChanges(); 10990d2d1bcef51993ca3fd957e45fb7ec85e45016e5Chandler Carruth 1100a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1101a33d9b4ebf732a5da6d56fd7319ff6c020789b1cAnders Carlsson fake_drive_service_helper()->DeleteResource( 110215b91764d08e886391c865c4a444d7b51141c284Eli Friedman GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 110315b91764d08e886391c865c4a444d7b51141c284Eli Friedman 1104a6fda124bf380479529d6a80b84b62cacd3cb707John Thompson EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1105b1bdced5967c54d029cd12907e8939c78decf14cArgyrios Kyrtzidis VerifyConsistency(); 1106b1bdced5967c54d029cd12907e8939c78decf14cArgyrios Kyrtzidis 1107b1bdced5967c54d029cd12907e8939c78decf14cArgyrios Kyrtzidis EXPECT_EQ(1u, CountApp()); 11080a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(2u, CountLocalFile(app_id)); 11090a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 1110ab8e281b32a3d3b9b18257d26844362bf806ecdcDaniel Dunbar 11110a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor EXPECT_EQ(3u, CountMetadata()); 1112b9e7e63ae2098bc02e79c032df0a3124d09a4b4eNate Begeman EXPECT_EQ(3u, CountTracker()); 111308a53269b1f8241e2e6797e845abbe640fb18253Peter Collingbourne} 11149c276ae0f24d4cee8f7954069d4b8eae45d0447dMike Stump 111584bccea1ad9fd8bc1f4ec3d1fc5dd8d15dabffbcPeter CollingbourneTEST_F(DriveBackendSyncTest, ConflictTest_AddFolder_AddFile) { 111692f5822df6a0d7571df44b5d279ed4f017fbb0e6Anders Carlsson std::string app_id = "example"; 1117a0068fc64351db9c47916566e3b85ab733cd8d6dDouglas Gregor 1118cfe9af250f466e7e38becea4428990448ae07737Roman Divacky RegisterApp(app_id); 1119f85e193739c953358c865005855253af4f68a497John McCall std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1120f85e193739c953358c865005855253af4f68a497John McCall 11218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 11220a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 11230a0428e96c6f1e8bef7a481a9eb69a6f6df38951Douglas Gregor 112414f79002e58556798e86168c63e48d533287eda5Douglas Gregor std::string file_id; 11254fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 11264fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor fake_drive_service_helper()->AddFile( 11274fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor app_root_folder_id, "conflict_to_pending_remote", "foo", 11284fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor &file_id)); 11294fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 11303397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl fake_drive_service_helper()->UpdateModificationTime( 11314fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor file_id, 11324fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor base::Time::Now() + base::TimeDelta::FromDays(1))); 11334fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11341eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump FetchRemoteChanges(); 113574e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner 113674e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 11374fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor fake_drive_service_helper()->AddFile( 11384fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor app_root_folder_id, "conflict_to_existing_remote", "foo", 11392596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar &file_id)); 11404fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 11411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump fake_drive_service_helper()->UpdateModificationTime( 11421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump file_id, 11435f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner base::Time::Now() + base::TimeDelta::FromDays(1))); 11444fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11454fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 11464fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyConsistency(); 114774e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner 11484fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(1u, CountApp()); 11494fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 11504fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 11511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 11525f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 11534fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(4u, CountMetadata()); 11544fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(4u, CountTracker()); 11551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump} 11565f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 11574fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_AddFolder_DeleteFile) { 11584fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::string app_id = "example"; 11594fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump RegisterApp(app_id); 116174e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 116274e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner 116374e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 116474e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 116574e976ba4b0d407bb798ea26476f618e256fc8c7Chris Lattner 11664fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 11674fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyConsistency(); 11684fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11694fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor // Test body starts from here. 11704fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 11714fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 11723397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 1173a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 11744fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 11754fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11763397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 11774fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor fake_drive_service_helper()->DeleteResource( 11781eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 11794fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1180e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor FetchRemoteChanges(); 11815f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner 11821e5f83ba515157dc7f263dc91b1d51c7a5754c35Chris Lattner EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1183e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor fake_drive_service_helper()->DeleteResource( 11841eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 11854fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 11874fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyConsistency(); 11884fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11894fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(1u, CountApp()); 11904fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 11914fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 11924fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 11934fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11944fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(4u, CountMetadata()); 11954fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(4u, CountTracker()); 11964fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor} 11974fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 11988538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian RedlTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFolder_AddFolder) { 11994fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::string app_id = "example"; 12004fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 12014fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor RegisterApp(app_id); 12024fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 12034fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 12044fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 12054fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 12068538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 12074fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 12084fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 1209ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar std::string file_id; 12104fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 12114fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor fake_drive_service_helper()->AddFolder( 12124fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor app_root_folder_id, 121314f79002e58556798e86168c63e48d533287eda5Douglas Gregor "conflict_to_pending_remote", &file_id)); 121414f79002e58556798e86168c63e48d533287eda5Douglas Gregor 121514f79002e58556798e86168c63e48d533287eda5Douglas Gregor FetchRemoteChanges(); 121614f79002e58556798e86168c63e48d533287eda5Douglas Gregor 121714f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 1218c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor fake_drive_service_helper()->AddFolder( 121914f79002e58556798e86168c63e48d533287eda5Douglas Gregor app_root_folder_id, 122014f79002e58556798e86168c63e48d533287eda5Douglas Gregor "conflict_to_existing_remote", NULL)); 12218538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 122214f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 122314f79002e58556798e86168c63e48d533287eda5Douglas Gregor VerifyConsistency(); 122414f79002e58556798e86168c63e48d533287eda5Douglas Gregor 122514f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(1u, CountApp()); 12262d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 12272d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 12282d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 122914f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1230c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor EXPECT_EQ(4u, CountMetadata()); 123114f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(4u, CountTracker()); 123214f79002e58556798e86168c63e48d533287eda5Douglas Gregor} 123314f79002e58556798e86168c63e48d533287eda5Douglas Gregor 123414f79002e58556798e86168c63e48d533287eda5Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFolder_DeleteFolder) { 1235c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor std::string app_id = "example"; 123614f79002e58556798e86168c63e48d533287eda5Douglas Gregor 123714f79002e58556798e86168c63e48d533287eda5Douglas Gregor RegisterApp(app_id); 12388538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 123914f79002e58556798e86168c63e48d533287eda5Douglas Gregor 124014f79002e58556798e86168c63e48d533287eda5Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 124114f79002e58556798e86168c63e48d533287eda5Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 124214f79002e58556798e86168c63e48d533287eda5Douglas Gregor 124314f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1244c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor VerifyConsistency(); 124514f79002e58556798e86168c63e48d533287eda5Douglas Gregor 124614f79002e58556798e86168c63e48d533287eda5Douglas Gregor // Test body starts from here. 124714f79002e58556798e86168c63e48d533287eda5Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 124814f79002e58556798e86168c63e48d533287eda5Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1249c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor 125014f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 125114f79002e58556798e86168c63e48d533287eda5Douglas Gregor fake_drive_service_helper()->DeleteResource( 12528538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 125314f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1254c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor FetchRemoteChanges(); 125514f79002e58556798e86168c63e48d533287eda5Douglas Gregor 125614f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1257f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth fake_drive_service_helper()->DeleteResource( 1258f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 1259f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 126014f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 126114f79002e58556798e86168c63e48d533287eda5Douglas Gregor VerifyConsistency(); 1262f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 126314f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(1u, CountApp()); 126414f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(1u, CountLocalFile(app_id)); 126514f79002e58556798e86168c63e48d533287eda5Douglas Gregor 126614f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(2u, CountMetadata()); 1267f60e9918690fcf02974bc1ebecd42c99d561855eDouglas Gregor EXPECT_EQ(2u, CountTracker()); 1268c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor} 126914f79002e58556798e86168c63e48d533287eda5Douglas Gregor 127014f79002e58556798e86168c63e48d533287eda5Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFolder_AddFile) { 1271cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_id = "example"; 1272cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1273cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RegisterApp(app_id); 1274cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1275cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1276cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 1277b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 1278b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1279b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1280b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1281cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1282cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->AddFile( 1283cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor app_root_folder_id, "conflict_to_pending_remote", "foo", NULL)); 1284cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1285cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor FetchRemoteChanges(); 1286cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1287cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1288cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->AddFile( 1289cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor app_root_folder_id, "conflict_to_existing_remote", "bar", 1290cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor NULL)); 1291cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1292cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1293cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyConsistency(); 1294cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1295cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(1u, CountApp()); 1296cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 1297cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1298cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1299cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 13005f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner EXPECT_EQ(4u, CountMetadata()); 1301cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(4u, CountTracker()); 1302cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1303cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1304b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFolder_DeleteFile) { 1305cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_id = "example"; 1306cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1307cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RegisterApp(app_id); 1308cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 13095f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1310cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1311cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1312cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 13135f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner VerifyConsistency(); 1314cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1315cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // Test body starts from here. 1316cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1317cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1318b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1319b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1320b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor fake_drive_service_helper()->DeleteResource( 1321b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 1322b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1323cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor FetchRemoteChanges(); 1324cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1325cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1326cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->DeleteResource( 1327cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 1328cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1329cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1330b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor VerifyConsistency(); 1331b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1332b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(1u, CountApp()); 1333b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(1u, CountLocalFile(app_id)); 1334b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1335b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(2u, CountMetadata()); 1336b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(2u, CountTracker()); 1337b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor} 1338b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1339b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_AddFile_AddFolder) { 1340b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor std::string app_id = "example"; 1341b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1342b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor RegisterApp(app_id); 1343b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1344b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1345b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1346b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1347b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1348cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string file_id; 1349cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 1350b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor fake_drive_service_helper()->AddFolder( 1351b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor app_root_folder_id, "conflict_to_pending_remote", 1352b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor &file_id)); 1353cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1354cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->UpdateModificationTime( 1355cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor file_id, 1356cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor base::Time::Now() - base::TimeDelta::FromDays(1))); 1357cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1358cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor FetchRemoteChanges(); 1359cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1360cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 1361832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor fake_drive_service_helper()->AddFolder( 13625f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner app_root_folder_id, "conflict_to_existing_remote", 1363cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor &file_id)); 1364cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1365cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->UpdateModificationTime( 1366cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor file_id, 1367cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor base::Time::Now() - base::TimeDelta::FromDays(1))); 1368cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1369cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 13705f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner VerifyConsistency(); 1371cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1372cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(1u, CountApp()); 1373cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 1374cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 1375cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 1376cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1377cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(4u, CountMetadata()); 1378cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(4u, CountTracker()); 1379cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1380cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1381cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_AddFile_DeleteFolder) { 1382cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_id = "example"; 1383cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1384cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RegisterApp(app_id); 1385cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1386cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1387cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 1388cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 1389cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1390cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1391cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyConsistency(); 1392cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1393cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor // Test body starts from here. 1394cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1395cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1396cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1397cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1398cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1399cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1400cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->DeleteResource( 1401cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 1402cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1403cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor FetchRemoteChanges(); 1404cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1405cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1406cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor fake_drive_service_helper()->DeleteResource( 1407cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 1408cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1409cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1410cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyConsistency(); 1411cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1412b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor EXPECT_EQ(1u, CountApp()); 1413cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 1414cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1415cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1416b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor 1417cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(4u, CountMetadata()); 1418cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor EXPECT_EQ(4u, CountTracker()); 1419cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor} 1420cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1421b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_AddFile_AddFile) { 1422b4dc485a2b38ea98ba7da01596fd0e8438120346Douglas Gregor std::string app_id = "example"; 1423cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1424cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor RegisterApp(app_id); 1425cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 1426cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1427cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 1428cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 1429cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor 143014f79002e58556798e86168c63e48d533287eda5Douglas Gregor std::string file_id; 143114f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 143214f79002e58556798e86168c63e48d533287eda5Douglas Gregor fake_drive_service_helper()->AddFile( 143314f79002e58556798e86168c63e48d533287eda5Douglas Gregor app_root_folder_id, "conflict_to_pending_remote", "foo", 143414f79002e58556798e86168c63e48d533287eda5Douglas Gregor &file_id)); 143514f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 143614f79002e58556798e86168c63e48d533287eda5Douglas Gregor fake_drive_service_helper()->UpdateModificationTime( 143714f79002e58556798e86168c63e48d533287eda5Douglas Gregor file_id, 1438a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl base::Time::Now() + base::TimeDelta::FromDays(1))); 1439e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 1440832d620b4ae0fc5fe28561b885b4cfc65cf5c9abDouglas Gregor FetchRemoteChanges(); 14417f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 14427f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1443f04ad69fed38d26fc0d6f7d6fd0a4631ddfbc7feChris Lattner fake_drive_service_helper()->AddFile( 14448538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl app_root_folder_id, "conflict_to_existing_remote", "bar", 144514f79002e58556798e86168c63e48d533287eda5Douglas Gregor &file_id)); 144614f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1447828e18cd80319c67b9b9776d1ed5411161d9f0bfChris Lattner fake_drive_service_helper()->UpdateModificationTime( 1448828e18cd80319c67b9b9776d1ed5411161d9f0bfChris Lattner file_id, 1449828e18cd80319c67b9b9776d1ed5411161d9f0bfChris Lattner base::Time::Now() + base::TimeDelta::FromDays(1))); 1450f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 14517f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 145214f79002e58556798e86168c63e48d533287eda5Douglas Gregor VerifyConsistency(); 145314f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1454090d9b53e32bb30d9e74de895bb59b409bd49e00Chris Lattner EXPECT_EQ(1u, CountApp()); 14554cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis EXPECT_EQ(3u, CountLocalFile(app_id)); 14564cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 14574cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 14587f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 1459f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(4u, CountMetadata()); 1460f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(4u, CountTracker()); 14610fa7d0b15ea2a224bfe43ac745d411f915da87ddSebastian Redl} 1462bdfe48ac80573e026595af91e541474dbf02565fDouglas Gregor 1463f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_AddFile_DeleteFile) { 146411a18f115e8974ef24e8d5bb549ed3289871efa4Kovarththanan Rajaratnam std::string app_id = "example"; 14657f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 14667f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor RegisterApp(app_id); 14677f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 146814f79002e58556798e86168c63e48d533287eda5Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 146914f79002e58556798e86168c63e48d533287eda5Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 147014f79002e58556798e86168c63e48d533287eda5Douglas Gregor 14714cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 14728538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl VerifyConsistency(); 14734cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis 14744cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis // Test body starts from here. 14758538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 147614f79002e58556798e86168c63e48d533287eda5Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1477f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 14787f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 147914f79002e58556798e86168c63e48d533287eda5Douglas Gregor 148014f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1481f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor fake_drive_service_helper()->DeleteResource( 1482f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 148314f79002e58556798e86168c63e48d533287eda5Douglas Gregor 148414f79002e58556798e86168c63e48d533287eda5Douglas Gregor FetchRemoteChanges(); 148514f79002e58556798e86168c63e48d533287eda5Douglas Gregor 148614f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1487bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor fake_drive_service_helper()->DeleteResource( 148814f79002e58556798e86168c63e48d533287eda5Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 148914f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1490b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1491b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis VerifyConsistency(); 1492b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis 1493b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis EXPECT_EQ(1u, CountApp()); 149414f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 149514f79002e58556798e86168c63e48d533287eda5Douglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 14961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 14972d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor 1498b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis EXPECT_EQ(4u, CountMetadata()); 1499b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios Kyrtzidis EXPECT_EQ(4u, CountTracker()); 15002d52be56ff595341be3c6cec337af6763804ce66Douglas Gregor} 1501e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor 1502b1c86492f9a9bef01a4567408c22f961bbd604feArgyrios KyrtzidisTEST_F(DriveBackendSyncTest, ConflictTest_UpdateFile_DeleteFile) { 1503fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer std::string app_id = "example"; 15042c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson 15052c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson RegisterApp(app_id); 15062c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson 15072c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 15082c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 15092c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson 15102c10c8072cabeb22651462e435e8b81f3221b6a5Anders Carlsson EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1511fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer VerifyConsistency(); 1512aba54a95e9d5e4dc9056abec6bb70ea777c4a7bcKovarththanan Rajaratnam 15131eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Test body starts from here. 1514e650c8c3bca2f58cad8ffa8aab63126d26e890cdDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 1515ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 151614f79002e58556798e86168c63e48d533287eda5Douglas Gregor 151714f79002e58556798e86168c63e48d533287eda5Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 151814f79002e58556798e86168c63e48d533287eda5Douglas Gregor fake_drive_service_helper()->DeleteResource( 151914f79002e58556798e86168c63e48d533287eda5Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 152014f79002e58556798e86168c63e48d533287eda5Douglas Gregor 152114f79002e58556798e86168c63e48d533287eda5Douglas Gregor FetchRemoteChanges(); 152214f79002e58556798e86168c63e48d533287eda5Douglas Gregor 152336c35ba0aca641e60e5dbee8efbc620c08b9bd61Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1524e127a0d80155b45dafe77f2b4380e5fa111a3345Chris Lattner fake_drive_service_helper()->DeleteResource( 152514f79002e58556798e86168c63e48d533287eda5Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 1526ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar 15275f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 152814f79002e58556798e86168c63e48d533287eda5Douglas Gregor VerifyConsistency(); 15298538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl 1530c9490c000f515c29f200a1215328d8ab9a0f3818Douglas Gregor EXPECT_EQ(1u, CountApp()); 15315f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner EXPECT_EQ(3u, CountLocalFile(app_id)); 1532ec312a1f0557b1d27f3eb6cf49acbf7e72696422Daniel Dunbar VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 15337f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 1534f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1535f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(4u, CountMetadata()); 1536f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(4u, CountTracker()); 153714f79002e58556798e86168c63e48d533287eda5Douglas Gregor} 153814f79002e58556798e86168c63e48d533287eda5Douglas Gregor 1539f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler CarruthTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFile_AddFolder) { 15401728762d5a8cfaf8d64385f47b311e84de1ae7a2Chandler Carruth std::string app_id = "example"; 154178df836808aee22c3157e1bc23bc4ec569b80568Chandler Carruth 154278df836808aee22c3157e1bc23bc4ec569b80568Chandler Carruth RegisterApp(app_id); 154378df836808aee22c3157e1bc23bc4ec569b80568Chandler Carruth 154414f79002e58556798e86168c63e48d533287eda5Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1545f60e9918690fcf02974bc1ebecd42c99d561855eDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1546f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1547bdfe48ac80573e026595af91e541474dbf02565fDouglas Gregor 1548f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1549f60e9918690fcf02974bc1ebecd42c99d561855eDouglas Gregor VerifyConsistency(); 1550f70d12dbd49fcc25f1dfc0127217112ae76bcb8fChandler Carruth 155114f79002e58556798e86168c63e48d533287eda5Douglas Gregor // Test body starts from here. 155214f79002e58556798e86168c63e48d533287eda5Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 155314f79002e58556798e86168c63e48d533287eda5Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 15547f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 1555bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 15567f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor fake_drive_service_helper()->AddFolder( 15577f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor app_root_folder_id, "conflict_to_pending_remote", NULL)); 15582eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor 15593397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl FetchRemoteChanges(); 15607f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 15617f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor EXPECT_EQ(google_apis::HTTP_CREATED, 15627f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor fake_drive_service_helper()->AddFolder( 15638538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl app_root_folder_id, "conflict_to_existing_remote", NULL)); 15647f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 1565f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 15667f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor VerifyConsistency(); 15677f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor 15681eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_EQ(1u, CountApp()); 15697f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 15708538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl VerifyLocalFolder(app_id, FPL("conflict_to_pending_remote")); 15717f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor VerifyLocalFolder(app_id, FPL("conflict_to_existing_remote")); 1572f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 15736e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer EXPECT_EQ(4u, CountMetadata()); 15747f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor EXPECT_EQ(4u, CountTracker()); 15754cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis} 15764cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis 15774cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios KyrtzidisTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFile_DeleteFolder) { 15784cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis std::string app_id = "example"; 15794cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis 15804cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis RegisterApp(app_id); 15814cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis 15824cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis AddLocalFolder(app_id, FPL("conflict_to_pending_remote")); 15834cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis AddLocalFolder(app_id, FPL("conflict_to_existing_remote")); 15844cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis 15854cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 15864cdb0e2a2e9d93805e5ceaf8bc7018bdd166aec1Argyrios Kyrtzidis VerifyConsistency(); 15873397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 15887f94b0b0c6791013d2f72ced9b4bedd3b23673a6Douglas Gregor // Test body starts from here. 15898538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1590f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1591f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1592f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1593f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1594f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1595f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1596f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1597f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1598f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1599f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor fake_drive_service_helper()->DeleteResource( 1600f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 1601f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1602f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor FetchRemoteChanges(); 1603f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1604f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1605f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor fake_drive_service_helper()->DeleteResource( 1606f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 1607f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1608f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1609f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor VerifyConsistency(); 1610f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1611f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(1u, CountApp()); 1612f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(1u, CountLocalFile(app_id)); 1613f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1614f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(2u, CountMetadata()); 1615f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(2u, CountTracker()); 1616f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor} 1617f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1618f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFile_AddFile) { 1619f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor std::string app_id = "example"; 1620f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1621f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RegisterApp(app_id); 1622f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1623f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 1624f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 1625f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1626f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1627f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1628f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor 1629f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1630f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor fake_drive_service_helper()->AddFile( 1631f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor app_root_folder_id, "conflict_to_pending_remote", "hoge", 1632f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor NULL)); 163314f79002e58556798e86168c63e48d533287eda5Douglas Gregor 163414f79002e58556798e86168c63e48d533287eda5Douglas Gregor FetchRemoteChanges(); 16354fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor 16364fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 16374fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor fake_drive_service_helper()->AddFile( 16384fed3f47f6b9e31d603c5c2d1f6d8ec2e1241e57Douglas Gregor app_root_folder_id, "conflict_to_existing_remote", "fuga", 16399c7361006b8cd95333958150dd0c803261807b68Douglas Gregor NULL)); 16409c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16419c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 16429c7361006b8cd95333958150dd0c803261807b68Douglas Gregor VerifyConsistency(); 16439c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16449c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(1u, CountApp()); 16459c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 16469c7361006b8cd95333958150dd0c803261807b68Douglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 16470b1fb988012da21d996c43e36867787a7a07b889Chris Lattner VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 16480b1fb988012da21d996c43e36867787a7a07b889Chris Lattner 16490b1fb988012da21d996c43e36867787a7a07b889Chris Lattner EXPECT_EQ(4u, CountMetadata()); 1650a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl EXPECT_EQ(4u, CountTracker()); 16517c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner} 16527c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 1653c1f9d828c733ec1eba06d01070735d1f36fda733Chris LattnerTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFile_UpdateFile) { 1654c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner std::string app_id = "example"; 1655c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner 16568538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl RegisterApp(app_id); 1657c1f9d828c733ec1eba06d01070735d1f36fda733Chris Lattner 16582eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 16592eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 16602eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1661ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 16621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 16633397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl VerifyConsistency(); 16642eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor 16652eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor // Test body starts from here. 16662eafc1b56347f772729e082e6bac824b0ef1b585Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 16671eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1668ecdcb883cbc6bb4a2445dc6f02d58d9bdb54a0edDouglas Gregor 16697c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner EXPECT_EQ(google_apis::HTTP_SUCCESS, 16707c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner fake_drive_service_helper()->UpdateFile( 16716a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")), 167220249a1af2e462dcafdd6a350f1c7967b264ff25Michael J. Spencer "hoge")); 16739c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16745f9e272e632e951b1efe824cd16acb4d96077930Chris Lattner FetchRemoteChanges(); 16759c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16769c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(google_apis::HTTP_SUCCESS, 1677040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor fake_drive_service_helper()->UpdateFile( 1678040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")), 16797c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner "fuga")); 16809c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16819c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 16829c7361006b8cd95333958150dd0c803261807b68Douglas Gregor VerifyConsistency(); 16839c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 16849c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(1u, CountApp()); 16859c7361006b8cd95333958150dd0c803261807b68Douglas Gregor EXPECT_EQ(3u, CountLocalFile(app_id)); 16869c7361006b8cd95333958150dd0c803261807b68Douglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_pending_remote"), "hoge"); 16879c7361006b8cd95333958150dd0c803261807b68Douglas Gregor VerifyLocalFile(app_id, FPL("conflict_to_existing_remote"), "fuga"); 16889c7361006b8cd95333958150dd0c803261807b68Douglas Gregor 1689040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor EXPECT_EQ(4u, CountMetadata()); 1690040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor EXPECT_EQ(4u, CountTracker()); 1691040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor} 1692040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor 1693040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas GregorTEST_F(DriveBackendSyncTest, ConflictTest_DeleteFile_DeleteFile) { 1694040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor std::string app_id = "example"; 1695040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor 1696040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor RegisterApp(app_id); 1697040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor 16989c7361006b8cd95333958150dd0c803261807b68Douglas Gregor std::string app_root_folder_id = GetFileIDByPath(app_id, FPL("")); 16999c7361006b8cd95333958150dd0c803261807b68Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_pending_remote"), "foo"); 17009c7361006b8cd95333958150dd0c803261807b68Douglas Gregor AddOrUpdateLocalFile(app_id, FPL("conflict_to_existing_remote"), "bar"); 1701040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor 1702040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 1703040a804f852c45c8b8c371ce1d421fd4cd84b6fbDouglas Gregor VerifyConsistency(); 17043397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl 17057c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner // Test body starts from here. 17063397c5570369f19b2d6c52e898f708d75ceede1fSebastian Redl RemoveLocal(app_id, FPL("conflict_to_pending_remote")); 1707ee9b0ba29094eb177a285e726ab96e979e5b9c61Douglas Gregor RemoveLocal(app_id, FPL("conflict_to_existing_remote")); 1708ee9b0ba29094eb177a285e726ab96e979e5b9c61Douglas Gregor 1709ee9b0ba29094eb177a285e726ab96e979e5b9c61Douglas Gregor EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 1710ee9b0ba29094eb177a285e726ab96e979e5b9c61Douglas Gregor fake_drive_service_helper()->DeleteResource( 1711ee9b0ba29094eb177a285e726ab96e979e5b9c61Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_pending_remote")))); 171220249a1af2e462dcafdd6a350f1c7967b264ff25Michael J. Spencer 17139c7361006b8cd95333958150dd0c803261807b68Douglas Gregor FetchRemoteChanges(); 17147c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 17157c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner EXPECT_EQ(google_apis::HTTP_NO_CONTENT, 17169c7361006b8cd95333958150dd0c803261807b68Douglas Gregor fake_drive_service_helper()->DeleteResource( 17179c7361006b8cd95333958150dd0c803261807b68Douglas Gregor GetFileIDByPath(app_id, FPL("conflict_to_existing_remote")))); 17187c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 17197c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner EXPECT_EQ(SYNC_STATUS_OK, ProcessChangesUntilDone()); 17201eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump VerifyConsistency(); 17217c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 17227c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner EXPECT_EQ(1u, CountApp()); 17238538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(1u, CountLocalFile(app_id)); 17247c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 17258538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl EXPECT_EQ(2u, CountMetadata()); 17261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EXPECT_EQ(2u, CountTracker()); 17277c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner} 17287c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner 17297c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner} // namespace drive_backend 17307c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner} // namespace sync_file_system 17317c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner