Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / sync_client_unittest.cc
index 784e247..6144e21 100644 (file)
@@ -4,7 +4,6 @@
 
 #include "chrome/browser/chromeos/drive/sync_client.h"
 
-#include "base/callback_helpers.h"
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_temp_dir.h"
@@ -24,6 +23,7 @@
 #include "chrome/browser/chromeos/drive/resource_entry_conversion.h"
 #include "chrome/browser/chromeos/drive/resource_metadata.h"
 #include "chrome/browser/chromeos/drive/test_util.h"
+#include "chrome/browser/drive/event_logger.h"
 #include "chrome/browser/drive/fake_drive_service.h"
 #include "content/public/test/test_browser_thread_bundle.h"
 #include "google_apis/drive/test_util.h"
@@ -113,12 +113,15 @@ class SyncClientTest : public testing::Test {
     fake_network_change_notifier_.reset(
         new test_util::FakeNetworkChangeNotifier);
 
+    logger_.reset(new EventLogger);
+
     drive_service_.reset(new SyncClientTestDriveService);
     drive_service_->LoadResourceListForWapi("gdata/empty_feed.json");
     drive_service_->LoadAccountMetadataForWapi(
         "gdata/account_metadata.json");
 
     scheduler_.reset(new JobScheduler(pref_service_.get(),
+                                      logger_.get(),
                                       drive_service_.get(),
                                       base::MessageLoopProxy::current().get()));
 
@@ -136,6 +139,16 @@ class SyncClientTest : public testing::Test {
                                NULL /* free_disk_space_getter */));
     ASSERT_TRUE(cache_->Initialize());
 
+    about_resource_loader_.reset(new AboutResourceLoader(scheduler_.get()));
+    loader_controller_.reset(new LoaderController);
+    change_list_loader_.reset(new ChangeListLoader(
+        logger_.get(),
+        base::MessageLoopProxy::current().get(),
+        metadata_.get(),
+        scheduler_.get(),
+        drive_service_.get(),
+        about_resource_loader_.get(),
+        loader_controller_.get()));
     ASSERT_NO_FATAL_FAILURE(SetUpTestData());
 
     sync_client_.reset(new SyncClient(base::MessageLoopProxy::current().get(),
@@ -143,6 +156,7 @@ class SyncClientTest : public testing::Test {
                                       scheduler_.get(),
                                       metadata_.get(),
                                       cache_.get(),
+                                      loader_controller_.get(),
                                       temp_dir_.path()));
 
     // Disable delaying so that DoSyncLoop() starts immediately.
@@ -185,12 +199,7 @@ class SyncClientTest : public testing::Test {
 
     // Load data from the service to the metadata.
     FileError error = FILE_ERROR_FAILED;
-    internal::ChangeListLoader change_list_loader(
-        base::MessageLoopProxy::current().get(),
-        metadata_.get(),
-        scheduler_.get(),
-        drive_service_.get());
-    change_list_loader.LoadForTesting(
+    change_list_loader_->LoadForTesting(
         google_apis::test_util::CreateCopyResultCallback(&error));
     base::RunLoop().RunUntilIdle();
     EXPECT_EQ(FILE_ERROR_OK, error);
@@ -208,14 +217,10 @@ class SyncClientTest : public testing::Test {
     EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(GetLocalId("fetched")));
 
     // Prepare a pinned-and-fetched-and-dirty file.
-    const std::string md5_dirty = "";  // Don't care.
     EXPECT_EQ(FILE_ERROR_OK,
-              cache_->Store(GetLocalId("dirty"), md5_dirty,
+              cache_->Store(GetLocalId("dirty"), std::string(),
                             temp_file, FileCache::FILE_OPERATION_COPY));
     EXPECT_EQ(FILE_ERROR_OK, cache_->Pin(GetLocalId("dirty")));
-    scoped_ptr<base::ScopedClosureRunner> file_closer;
-    EXPECT_EQ(FILE_ERROR_OK,
-              cache_->OpenForWrite(GetLocalId("dirty"), &file_closer));
 
     // Prepare a removed file.
     file_system::RemoveOperation remove_operation(
@@ -254,6 +259,7 @@ class SyncClientTest : public testing::Test {
   scoped_ptr<TestingPrefServiceSimple> pref_service_;
   scoped_ptr<test_util::FakeNetworkChangeNotifier>
       fake_network_change_notifier_;
+  scoped_ptr<EventLogger> logger_;
   scoped_ptr<SyncClientTestDriveService> drive_service_;
   DummyOperationObserver observer_;
   scoped_ptr<JobScheduler> scheduler_;
@@ -261,6 +267,9 @@ class SyncClientTest : public testing::Test {
              test_util::DestroyHelperForTests> metadata_storage_;
   scoped_ptr<ResourceMetadata, test_util::DestroyHelperForTests> metadata_;
   scoped_ptr<FileCache, test_util::DestroyHelperForTests> cache_;
+  scoped_ptr<AboutResourceLoader> about_resource_loader_;
+  scoped_ptr<LoaderController> loader_controller_;
+  scoped_ptr<ChangeListLoader> change_list_loader_;
   scoped_ptr<SyncClient> sync_client_;
 
   std::map<std::string, std::string> resource_ids_;  // Name-to-id map.
@@ -432,5 +441,44 @@ TEST_F(SyncClientTest, ScheduleRerun) {
   EXPECT_EQ(2, drive_service_->download_file_count());
 }
 
+TEST_F(SyncClientTest, Dependencies) {
+  // Create directories locally.
+  const base::FilePath kPath1(FILE_PATH_LITERAL("drive/root/dir1"));
+  const base::FilePath kPath2 = kPath1.AppendASCII("dir2");
+
+  ResourceEntry parent;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(kPath1.DirName(), &parent));
+
+  ResourceEntry entry1;
+  entry1.set_parent_local_id(parent.local_id());
+  entry1.set_title(kPath1.BaseName().AsUTF8Unsafe());
+  entry1.mutable_file_info()->set_is_directory(true);
+  entry1.set_metadata_edit_state(ResourceEntry::DIRTY);
+  std::string local_id1;
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->AddEntry(entry1, &local_id1));
+
+  ResourceEntry entry2;
+  entry2.set_parent_local_id(local_id1);
+  entry2.set_title(kPath2.BaseName().AsUTF8Unsafe());
+  entry2.mutable_file_info()->set_is_directory(true);
+  entry2.set_metadata_edit_state(ResourceEntry::DIRTY);
+  std::string local_id2;
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->AddEntry(entry2, &local_id2));
+
+  // Start syncing the child first.
+  sync_client_->AddUpdateTask(ClientContext(USER_INITIATED), local_id2);
+  base::RunLoop().RunUntilIdle();
+  // Start syncing the parent later.
+  sync_client_->AddUpdateTask(ClientContext(USER_INITIATED), local_id1);
+  base::RunLoop().RunUntilIdle();
+
+  // Both entries are synced.
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryById(local_id1, &entry1));
+  EXPECT_EQ(ResourceEntry::CLEAN, entry1.metadata_edit_state());
+  EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryById(local_id2, &entry2));
+  EXPECT_EQ(ResourceEntry::CLEAN, entry2.metadata_edit_state());
+}
+
 }  // namespace internal
 }  // namespace drive