Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / sync_file_system / drive_backend / task_dependency_manager_unittest.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/sync_file_system/drive_backend/task_dependency_manager.h"
6
7 #include "base/files/file_path.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 #define FPL(path) FILE_PATH_LITERAL(path)
11
12 namespace sync_file_system {
13 namespace drive_backend {
14
15 namespace {
16
17 base::FilePath MakePath(const base::FilePath::StringType& path) {
18   return base::FilePath(path).NormalizePathSeparators();
19 }
20
21 bool InsertPath(TaskDependencyManager* manager,
22                 const std::string& app_id,
23                 const base::FilePath::StringType& path) {
24   TaskBlocker blocker;
25   blocker.app_id = app_id;
26   blocker.paths.push_back(MakePath(path));
27   return manager->Insert(&blocker);
28 }
29
30 void ErasePath(TaskDependencyManager* manager,
31                const std::string& app_id,
32                const base::FilePath::StringType& path) {
33   TaskBlocker blocker;
34   blocker.app_id = app_id;
35   blocker.paths.push_back(MakePath(path));
36   return manager->Erase(&blocker);
37 }
38
39 bool InsertExclusiveTask(TaskDependencyManager* manager) {
40   TaskBlocker blocker;
41   blocker.exclusive = true;
42   return manager->Insert(&blocker);
43 }
44
45 void EraseExclusiveTask(TaskDependencyManager* manager) {
46   TaskBlocker blocker;
47   blocker.exclusive = true;
48   manager->Erase(&blocker);
49 }
50
51 }  // namespace
52
53 TEST(TaskDependencyManagerTest, BasicTest) {
54   TaskDependencyManager manager;
55   TaskBlocker blocker;
56   blocker.app_id = "app_id";
57   blocker.paths.push_back(MakePath(FPL("/folder/file")));
58   blocker.file_ids.push_back("file_id");
59   blocker.tracker_ids.push_back(100);
60
61   EXPECT_TRUE(manager.Insert(&blocker));
62   EXPECT_FALSE(manager.Insert(&blocker));
63
64   manager.Erase(&blocker);
65
66   EXPECT_TRUE(manager.Insert(&blocker));
67
68   manager.Erase(&blocker);
69 }
70
71 TEST(TaskDependencyManagerTest, BlocksAncestorAndDescendant) {
72   TaskDependencyManager manager;
73
74   EXPECT_TRUE(InsertPath(
75       &manager, "app_id", FPL("/ancestor/parent/self/child/descendant")));
76   EXPECT_FALSE(InsertPath(&manager, "app_id", FPL("/ancestor")));
77   EXPECT_FALSE(InsertPath(&manager, "app_id", FPL("/ancestor/parent")));
78   EXPECT_FALSE(InsertPath(&manager, "app_id", FPL("/ancestor/parent/self")));
79   EXPECT_FALSE(InsertPath(
80       &manager, "app_id", FPL("/ancestor/parent/self/child")));
81   EXPECT_FALSE(InsertPath(
82       &manager, "app_id", FPL("/ancestor/parent/self/child/descendant")));
83
84   EXPECT_TRUE(InsertPath(
85       &manager, "another_app_id", FPL("/ancestor/parent/self")));
86   ErasePath(&manager, "another_app_id", FPL("/ancestor/parent/self"));
87
88   EXPECT_TRUE(InsertPath(&manager, "app_id", FPL("/file")));
89   ErasePath(&manager, "app_id", FPL("/file"));
90
91   ErasePath(&manager, "app_id", FPL("/ancestor/parent/self/child/descendant"));
92 }
93
94 TEST(TaskDependencyManagerTest, ExclusiveTask) {
95   TaskDependencyManager manager;
96
97   EXPECT_TRUE(InsertPath(&manager, "app_id", FPL("/foo/bar")));
98   EXPECT_FALSE(InsertExclusiveTask(&manager));
99   ErasePath(&manager, "app_id", FPL("/foo/bar"));
100
101   EXPECT_TRUE(InsertExclusiveTask(&manager));
102   EXPECT_FALSE(InsertPath(&manager, "app_id", FPL("/foo/bar")));
103   EraseExclusiveTask(&manager);
104
105   EXPECT_TRUE(InsertPath(&manager, "app_id", FPL("/foo/bar")));
106   ErasePath(&manager, "app_id", FPL("/foo/bar"));
107 }
108
109 TEST(TaskDependencyManagerTest, PermissiveTask) {
110   TaskDependencyManager manager;
111
112   EXPECT_TRUE(manager.Insert(nullptr));
113   EXPECT_TRUE(InsertPath(&manager, "app_id", FPL("/foo/bar")));
114   EXPECT_FALSE(InsertExclusiveTask(&manager));
115   ErasePath(&manager, "app_id", FPL("/foo/bar"));
116
117   EXPECT_FALSE(InsertExclusiveTask(&manager));
118   manager.Erase(nullptr);
119   EXPECT_TRUE(InsertExclusiveTask(&manager));
120
121   EXPECT_FALSE(manager.Insert(nullptr));
122
123   EraseExclusiveTask(&manager);
124 }
125
126 }  // namespace drive_backend
127 }  // namespace sync_file_system