list_changes_task_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/format_macros.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/stringprintf.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/google_apis/drive_api_parser.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/register_app_task.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/drive_backend_v1/fake_drive_service_helper.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_test_util.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace sync_file_system {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace drive_backend {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kAppID[] = "app_id";
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUnregisteredAppID[] = "app_id unregistered";
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ListChangesTaskTest : public testing::Test,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            public SyncEngineContext {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ListChangesTaskTest() {}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~ListChangesTaskTest() {}
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(database_dir_.CreateUniqueTempDir());
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fake_drive_service_.reset(new drive::FakeDriveService);
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(fake_drive_service_->LoadAccountMetadataForWapi(
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "sync_file_system/account_metadata.json"));
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(fake_drive_service_->LoadResourceListForWapi(
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "gdata/empty_feed.json"));
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    drive_uploader_.reset(new drive::DriveUploader(
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        fake_drive_service_.get(), base::MessageLoopProxy::current()));
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fake_drive_service_helper_.reset(new FakeDriveServiceHelper(
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        fake_drive_service_.get(), drive_uploader_.get()));
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SetUpRemoteFolders();
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    InitializeMetadataDatabase();
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RegisterApp(kAppID);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() OVERRIDE {
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    metadata_database_.reset();
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::RunLoop().RunUntilIdle();
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual drive::DriveServiceInterface* GetDriveService() OVERRIDE {
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fake_drive_service_.get();
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual drive::DriveUploader* GetDriveUploader() OVERRIDE {
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual MetadataDatabase* GetMetadataDatabase() OVERRIDE {
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return metadata_database_.get();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual RemoteChangeProcessor* GetRemoteChangeProcessor() OVERRIDE {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return NULL;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual base::SequencedTaskRunner* GetBlockingTaskRunner() OVERRIDE {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return base::MessageLoopProxy::current();
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int64 GetRemoteLargestChangeID() {
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    scoped_ptr<google_apis::AboutResource> about_resource;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(google_apis::HTTP_SUCCESS,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper_->GetAboutResource(&about_resource));
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return about_resource->largest_change_id();
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SyncStatusCode RunTask(SyncTask* sync_task) {
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SyncStatusCode status = SYNC_STATUS_UNKNOWN;
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sync_task->Run(CreateResultReceiver(&status));
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::RunLoop().RunUntilIdle();
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return status;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  size_t CountDirtyTracker() {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return metadata_database_->dirty_trackers_.size();
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeDriveServiceHelper* fake_drive_service_helper() {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fake_drive_service_helper_.get();
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  drive::FakeDriveService* fake_drive_service() {
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fake_drive_service_.get();
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUpChangesInFolder(const std::string& folder_id) {
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string new_file_id;
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->AddFile(
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  folder_id, "new file", "file contents", &new_file_id));
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string same_name_file_id;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->AddFile(
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  folder_id, "new file", "file contents",
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  &same_name_file_id));
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string new_folder_id;
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED,
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->AddFolder(
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  folder_id, "new folder", &new_folder_id));
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string modified_file_id;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->AddFile(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  folder_id, "modified file", "file content",
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  &modified_file_id));
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->UpdateFile(
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  modified_file_id, "modified file content"));
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string trashed_file_id;
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->AddFile(
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  folder_id, "trashed file", "file content",
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  &trashed_file_id));
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS,
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper()->RemoveResource(trashed_file_id));
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string root_resource_id() {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fake_drive_service_->GetRootResourceId();
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string sync_root_folder_id() {
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return sync_root_folder_id_;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string app_root_folder_id() {
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return app_root_folder_id_;
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string unregistered_app_root_folder_id() {
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return unregistered_app_root_folder_id_;
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetUpRemoteFolders() {
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED,
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper_->AddOrphanedFolder(
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  kSyncRootFolderTitle, &sync_root_folder_id_));
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED,
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper_->AddFolder(
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  sync_root_folder_id_, kAppID, &app_root_folder_id_));
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED,
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              fake_drive_service_helper_->AddFolder(
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  sync_root_folder_id_, kUnregisteredAppID,
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                  &unregistered_app_root_folder_id_));
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void InitializeMetadataDatabase() {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SyncEngineInitializer initializer(base::MessageLoopProxy::current(),
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      fake_drive_service_.get(),
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      database_dir_.path());
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    EXPECT_EQ(SYNC_STATUS_OK, RunTask(&initializer));
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    metadata_database_ = initializer.PassMetadataDatabase();
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
182
183  void RegisterApp(const std::string& app_id) {
184    RegisterAppTask register_app(this, app_id);
185    EXPECT_EQ(SYNC_STATUS_OK, RunTask(&register_app));
186  }
187
188  std::string GenerateFileID() {
189    return base::StringPrintf("file_id_%" PRId64, next_file_id_++);
190  }
191
192  std::string sync_root_folder_id_;
193  std::string app_root_folder_id_;
194  std::string unregistered_app_root_folder_id_;
195
196  int64 next_file_id_;
197  int64 next_tracker_id_;
198
199  content::TestBrowserThreadBundle browser_threads_;
200  base::ScopedTempDir database_dir_;
201
202  scoped_ptr<drive::FakeDriveService> fake_drive_service_;
203  scoped_ptr<drive::DriveUploader> drive_uploader_;
204  scoped_ptr<FakeDriveServiceHelper> fake_drive_service_helper_;
205
206  scoped_ptr<MetadataDatabase> metadata_database_;
207
208  DISALLOW_COPY_AND_ASSIGN(ListChangesTaskTest);
209};
210
211TEST_F(ListChangesTaskTest, NoChange) {
212  size_t num_dirty_trackers = CountDirtyTracker();
213
214  ListChangesTask list_changes(this);
215  EXPECT_EQ(SYNC_STATUS_OK, RunTask(&list_changes));
216
217  EXPECT_EQ(num_dirty_trackers, CountDirtyTracker());
218}
219
220TEST_F(ListChangesTaskTest, UnrelatedChange) {
221  size_t num_dirty_trackers = CountDirtyTracker();
222
223  SetUpChangesInFolder(root_resource_id());
224  SetUpChangesInFolder(unregistered_app_root_folder_id());
225
226  ListChangesTask list_changes(this);
227  EXPECT_EQ(SYNC_STATUS_OK, RunTask(&list_changes));
228
229  EXPECT_EQ(num_dirty_trackers, CountDirtyTracker());
230}
231
232TEST_F(ListChangesTaskTest, UnderTrackedFolder) {
233  size_t num_dirty_trackers = CountDirtyTracker();
234
235  SetUpChangesInFolder(app_root_folder_id());
236
237  ListChangesTask list_changes(this);
238  EXPECT_EQ(SYNC_STATUS_OK, RunTask(&list_changes));
239
240  EXPECT_EQ(num_dirty_trackers + 4, CountDirtyTracker());
241}
242
243}  // namespace drive_backend
244}  // namespace sync_file_system
245