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

Side by Side Diff: chrome/browser/sync_file_system/remote_sync_operation_resolver_unittest.cc

Issue 13986011: SyncFS: Introduce RemoteSyncOperationResolver for directory operation support (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review fix Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 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 <sstream>
6 #include <string>
7 #include <vector>
8
9 #include "chrome/browser/sync_file_system/remote_sync_operation_resolver.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "webkit/fileapi/syncable/file_change.h"
12 #include "webkit/fileapi/syncable/sync_file_type.h"
13
14 namespace sync_file_system {
15
16 namespace {
17
18 struct Input {
19 SyncFileType local_file_type;
20 FileChangeList local_changes;
21
22 std::string DebugString() {
23 std::ostringstream ss;
24 ss << "LocalFileType: " << local_file_type
25 << ", LocalChanges: " << local_changes.DebugString();
26 return ss.str();
27 }
28 };
29
30 template <typename type, size_t array_size>
31 std::vector<type> CreateList(const type (&inputs)[array_size]) {
32 return std::vector<type>(inputs, inputs + array_size);
33 }
34
35 FileChangeList CreateEmptyChange() {
36 return FileChangeList();
37 }
38
39 FileChangeList CreateAddOrUpdateFileChange() {
40 FileChangeList list;
41 list.Update(FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE,
42 SYNC_FILE_TYPE_FILE));
43 return list;
44 }
45
46 FileChangeList CreateAddDirectoryChange() {
47 FileChangeList list;
48 list.Update(FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE,
49 SYNC_FILE_TYPE_DIRECTORY));
50 return list;
51 }
52
53 FileChangeList CreateDeleteFileChange() {
54 FileChangeList list;
55 list.Update(FileChange(FileChange::FILE_CHANGE_DELETE,
56 SYNC_FILE_TYPE_FILE));
57 return list;
58 }
59
60 FileChangeList CreateDeleteDirectoryChange() {
61 FileChangeList list;
62 list.Update(FileChange(FileChange::FILE_CHANGE_DELETE,
63 SYNC_FILE_TYPE_DIRECTORY));
64 return list;
65 }
66
67 std::vector<Input> CreateInput() {
68 const Input inputs[] = {
69 { SYNC_FILE_TYPE_UNKNOWN, CreateEmptyChange() },
70 { SYNC_FILE_TYPE_UNKNOWN, CreateAddOrUpdateFileChange() },
71 { SYNC_FILE_TYPE_UNKNOWN, CreateAddDirectoryChange() },
72 { SYNC_FILE_TYPE_UNKNOWN, CreateDeleteFileChange() },
73 { SYNC_FILE_TYPE_UNKNOWN, CreateDeleteDirectoryChange() },
74
75 { SYNC_FILE_TYPE_FILE, CreateEmptyChange() },
76 { SYNC_FILE_TYPE_FILE, CreateAddOrUpdateFileChange() },
77 { SYNC_FILE_TYPE_FILE, CreateAddDirectoryChange() },
78 { SYNC_FILE_TYPE_FILE, CreateDeleteFileChange() },
79 { SYNC_FILE_TYPE_FILE, CreateDeleteDirectoryChange() },
80
81 { SYNC_FILE_TYPE_DIRECTORY, CreateEmptyChange() },
82 { SYNC_FILE_TYPE_DIRECTORY, CreateAddOrUpdateFileChange() },
83 { SYNC_FILE_TYPE_DIRECTORY, CreateAddDirectoryChange() },
84 { SYNC_FILE_TYPE_DIRECTORY, CreateDeleteFileChange() },
85 { SYNC_FILE_TYPE_DIRECTORY, CreateDeleteDirectoryChange() },
86 };
87 return CreateList(inputs);
88 }
89
90 } // namespace
91
92 class RemoteSyncOperationResolverTest : public testing::Test {
93 public:
94 RemoteSyncOperationResolverTest() {}
95
96 protected:
97 typedef RemoteSyncOperationResolver Resolver;
98 typedef std::vector<RemoteSyncOperationType> ExpectedTypes;
99
100 DISALLOW_COPY_AND_ASSIGN(RemoteSyncOperationResolverTest);
101 };
102
103 TEST_F(RemoteSyncOperationResolverTest, ResolveForAddOrUpdateFile) {
104 const RemoteSyncOperationType kExpectedTypes[] = {
105 REMOTE_SYNC_OPERATION_ADD_FILE,
106 REMOTE_SYNC_OPERATION_FAIL,
107 REMOTE_SYNC_OPERATION_FAIL,
108 REMOTE_SYNC_OPERATION_ADD_FILE,
109 REMOTE_SYNC_OPERATION_ADD_FILE,
110
111 REMOTE_SYNC_OPERATION_UPDATE_FILE,
112 REMOTE_SYNC_OPERATION_CONFLICT,
113 REMOTE_SYNC_OPERATION_FAIL,
114 REMOTE_SYNC_OPERATION_FAIL,
115 REMOTE_SYNC_OPERATION_FAIL,
116
117 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
118 REMOTE_SYNC_OPERATION_FAIL,
119 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
120 REMOTE_SYNC_OPERATION_FAIL,
121 REMOTE_SYNC_OPERATION_FAIL,
122 };
123
124 ExpectedTypes expected_types = CreateList(kExpectedTypes);
125 std::vector<Input> inputs = CreateInput();
126
127 ASSERT_EQ(expected_types.size(), inputs.size());
128 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
129 EXPECT_EQ(expected_types[i],
130 Resolver::ResolveForAddOrUpdateFile(
131 inputs[i].local_changes, inputs[i].local_file_type))
132 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
133 }
134
135 TEST_F(RemoteSyncOperationResolverTest, ResolveForAddOrUpdateFileInConflict) {
136 const RemoteSyncOperationType kExpectedTypes[] = {
137 REMOTE_SYNC_OPERATION_FAIL,
138 REMOTE_SYNC_OPERATION_FAIL,
139 REMOTE_SYNC_OPERATION_FAIL,
140 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
141 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
142
143 REMOTE_SYNC_OPERATION_CONFLICT,
144 REMOTE_SYNC_OPERATION_CONFLICT,
145 REMOTE_SYNC_OPERATION_FAIL,
146 REMOTE_SYNC_OPERATION_FAIL,
147 REMOTE_SYNC_OPERATION_FAIL,
148
149 REMOTE_SYNC_OPERATION_FAIL,
150 REMOTE_SYNC_OPERATION_FAIL,
151 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
152 REMOTE_SYNC_OPERATION_FAIL,
153 REMOTE_SYNC_OPERATION_FAIL,
154 };
155
156 ExpectedTypes expected_types = CreateList(kExpectedTypes);
157 std::vector<Input> inputs = CreateInput();
158
159 ASSERT_EQ(expected_types.size(), inputs.size());
160 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
161 EXPECT_EQ(expected_types[i],
162 Resolver::ResolveForAddOrUpdateFileInConflict(
163 inputs[i].local_changes, inputs[i].local_file_type))
164 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
165 }
166
167 TEST_F(RemoteSyncOperationResolverTest, ResolveForAddDirectory) {
168 const RemoteSyncOperationType kExpectedTypes[] = {
169 REMOTE_SYNC_OPERATION_ADD_DIRECTORY,
170 REMOTE_SYNC_OPERATION_FAIL,
171 REMOTE_SYNC_OPERATION_FAIL,
172 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
173 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
174
175 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
176 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
177 REMOTE_SYNC_OPERATION_FAIL,
178 REMOTE_SYNC_OPERATION_FAIL,
179 REMOTE_SYNC_OPERATION_FAIL,
180
181 REMOTE_SYNC_OPERATION_NONE,
182 REMOTE_SYNC_OPERATION_FAIL,
183 REMOTE_SYNC_OPERATION_NONE,
184 REMOTE_SYNC_OPERATION_FAIL,
185 REMOTE_SYNC_OPERATION_FAIL,
186 };
187
188 ExpectedTypes expected_types = CreateList(kExpectedTypes);
189 std::vector<Input> inputs = CreateInput();
190
191 ASSERT_EQ(expected_types.size(), inputs.size());
192 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
193 EXPECT_EQ(expected_types[i],
194 Resolver::ResolveForAddDirectory(
195 inputs[i].local_changes, inputs[i].local_file_type))
196 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
197 }
198
199 TEST_F(RemoteSyncOperationResolverTest, ResolveForAddDirectoryInConflict) {
200 const RemoteSyncOperationType kExpectedTypes[] = {
201 REMOTE_SYNC_OPERATION_FAIL,
202 REMOTE_SYNC_OPERATION_FAIL,
203 REMOTE_SYNC_OPERATION_FAIL,
204 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
205 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
206
207 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
208 REMOTE_SYNC_OPERATION_RESOLVE_TO_REMOTE,
209 REMOTE_SYNC_OPERATION_FAIL,
210 REMOTE_SYNC_OPERATION_FAIL,
211 REMOTE_SYNC_OPERATION_FAIL,
212
213 REMOTE_SYNC_OPERATION_FAIL,
214 REMOTE_SYNC_OPERATION_FAIL,
215 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
216 REMOTE_SYNC_OPERATION_FAIL,
217 REMOTE_SYNC_OPERATION_FAIL,
218 };
219
220 ExpectedTypes expected_types = CreateList(kExpectedTypes);
221 std::vector<Input> inputs = CreateInput();
222
223 ASSERT_EQ(expected_types.size(), inputs.size());
224 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
225 EXPECT_EQ(expected_types[i],
226 Resolver::ResolveForAddDirectoryInConflict(
227 inputs[i].local_changes, inputs[i].local_file_type))
228 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
229 }
230
231 TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteFile) {
232 const RemoteSyncOperationType kExpectedTypes[] = {
233 REMOTE_SYNC_OPERATION_DELETE_METADATA,
234 REMOTE_SYNC_OPERATION_FAIL,
235 REMOTE_SYNC_OPERATION_FAIL,
236 REMOTE_SYNC_OPERATION_DELETE_METADATA,
237 REMOTE_SYNC_OPERATION_DELETE_METADATA,
238
239 REMOTE_SYNC_OPERATION_DELETE_FILE,
240 REMOTE_SYNC_OPERATION_NONE,
241 REMOTE_SYNC_OPERATION_FAIL,
242 REMOTE_SYNC_OPERATION_FAIL,
243 REMOTE_SYNC_OPERATION_FAIL,
244
245 REMOTE_SYNC_OPERATION_NONE,
246 REMOTE_SYNC_OPERATION_FAIL,
247 REMOTE_SYNC_OPERATION_NONE,
248 REMOTE_SYNC_OPERATION_FAIL,
249 REMOTE_SYNC_OPERATION_FAIL,
250 };
251
252 ExpectedTypes expected_types = CreateList(kExpectedTypes);
253 std::vector<Input> inputs = CreateInput();
254
255 ASSERT_EQ(expected_types.size(), inputs.size());
256 for (ExpectedTypes::size_type i = 0; i < inputs.size(); ++i)
257 EXPECT_EQ(expected_types[i],
258 Resolver::ResolveForDeleteFile(
259 inputs[i].local_changes, inputs[i].local_file_type))
260 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
261 }
262
263 TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteFileInConflict) {
264 const RemoteSyncOperationType kExpectedTypes[] = {
265 REMOTE_SYNC_OPERATION_FAIL,
266 REMOTE_SYNC_OPERATION_FAIL,
267 REMOTE_SYNC_OPERATION_FAIL,
268 REMOTE_SYNC_OPERATION_DELETE_METADATA,
269 REMOTE_SYNC_OPERATION_DELETE_METADATA,
270
271 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
272 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
273 REMOTE_SYNC_OPERATION_FAIL,
274 REMOTE_SYNC_OPERATION_FAIL,
275 REMOTE_SYNC_OPERATION_FAIL,
276
277 REMOTE_SYNC_OPERATION_FAIL,
278 REMOTE_SYNC_OPERATION_FAIL,
279 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
280 REMOTE_SYNC_OPERATION_FAIL,
281 REMOTE_SYNC_OPERATION_FAIL,
282 };
283
284 ExpectedTypes expected_types = CreateList(kExpectedTypes);
285 std::vector<Input> inputs = CreateInput();
286
287 ASSERT_EQ(expected_types.size(), inputs.size());
288 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
289 EXPECT_EQ(expected_types[i],
290 Resolver::ResolveForDeleteFileInConflict(
291 inputs[i].local_changes, inputs[i].local_file_type))
292 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
293 }
294
295 TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteDirectory) {
296 const RemoteSyncOperationType kExpectedTypes[] = {
297 REMOTE_SYNC_OPERATION_NONE,
298 REMOTE_SYNC_OPERATION_FAIL,
299 REMOTE_SYNC_OPERATION_FAIL,
300 REMOTE_SYNC_OPERATION_NONE,
301 REMOTE_SYNC_OPERATION_NONE,
302
303 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
304 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
305 REMOTE_SYNC_OPERATION_FAIL,
306 REMOTE_SYNC_OPERATION_FAIL,
307 REMOTE_SYNC_OPERATION_FAIL,
308
309 REMOTE_SYNC_OPERATION_DELETE_DIRECTORY,
310 REMOTE_SYNC_OPERATION_FAIL,
311 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
312 REMOTE_SYNC_OPERATION_FAIL,
313 REMOTE_SYNC_OPERATION_FAIL,
314 };
315
316 ExpectedTypes expected_types = CreateList(kExpectedTypes);
317 std::vector<Input> inputs = CreateInput();
318
319 ASSERT_EQ(expected_types.size(), inputs.size());
320 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
321 EXPECT_EQ(expected_types[i],
322 Resolver::ResolveForDeleteDirectory(
323 inputs[i].local_changes, inputs[i].local_file_type))
324 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
325 }
326
327 TEST_F(RemoteSyncOperationResolverTest, ResolveForDeleteDirectoryInConflict) {
328 const RemoteSyncOperationType kExpectedTypes[] = {
329 REMOTE_SYNC_OPERATION_FAIL,
330 REMOTE_SYNC_OPERATION_FAIL,
331 REMOTE_SYNC_OPERATION_FAIL,
332 REMOTE_SYNC_OPERATION_DELETE_METADATA,
333 REMOTE_SYNC_OPERATION_DELETE_METADATA,
334
335 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
336 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
337 REMOTE_SYNC_OPERATION_FAIL,
338 REMOTE_SYNC_OPERATION_FAIL,
339 REMOTE_SYNC_OPERATION_FAIL,
340
341 REMOTE_SYNC_OPERATION_FAIL,
342 REMOTE_SYNC_OPERATION_FAIL,
343 REMOTE_SYNC_OPERATION_RESOLVE_TO_LOCAL,
344 REMOTE_SYNC_OPERATION_FAIL,
345 REMOTE_SYNC_OPERATION_FAIL,
346 };
347
348 ExpectedTypes expected_types = CreateList(kExpectedTypes);
349 std::vector<Input> inputs = CreateInput();
350
351 ASSERT_EQ(expected_types.size(), inputs.size());
352 for (ExpectedTypes::size_type i = 0; i < expected_types.size(); ++i)
353 EXPECT_EQ(expected_types[i],
354 Resolver::ResolveForDeleteDirectoryInConflict(
355 inputs[i].local_changes, inputs[i].local_file_type))
356 << "Case " << i << ": (" << inputs[i].DebugString() << ")";
357 }
358
359 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/remote_sync_operation_resolver.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698