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

Side by Side Diff: sync/engine/syncer_unittest.cc

Issue 11863011: Revert 176340 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 11 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
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Syncer unit tests. Unfortunately a lot of these tests 5 // Syncer unit tests. Unfortunately a lot of these tests
6 // are outdated and need to be reworked and updated. 6 // are outdated and need to be reworked and updated.
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <limits> 9 #include <limits>
10 #include <list> 10 #include <list>
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 348 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
349 while (!test->id.IsRoot()) { 349 while (!test->id.IsRoot()) {
350 if (test->commit_index >= 0) { 350 if (test->commit_index >= 0) {
351 map<int, syncable::Id>::value_type entry(test->commit_index, 351 map<int, syncable::Id>::value_type entry(test->commit_index,
352 test->id); 352 test->id);
353 bool double_position = !expected_positions.insert(entry).second; 353 bool double_position = !expected_positions.insert(entry).second;
354 ASSERT_FALSE(double_position) << "Two id's expected at one position"; 354 ASSERT_FALSE(double_position) << "Two id's expected at one position";
355 } 355 }
356 string utf8_name = test->id.GetServerId(); 356 string utf8_name = test->id.GetServerId();
357 string name(utf8_name.begin(), utf8_name.end()); 357 string name(utf8_name.begin(), utf8_name.end());
358 MutableEntry entry(&trans, CREATE, BOOKMARKS, test->parent_id, name); 358 MutableEntry entry(&trans, CREATE, test->parent_id, name);
359 359
360 entry.Put(syncable::ID, test->id); 360 entry.Put(syncable::ID, test->id);
361 if (test->id.ServerKnows()) { 361 if (test->id.ServerKnows()) {
362 entry.Put(BASE_VERSION, 5); 362 entry.Put(BASE_VERSION, 5);
363 entry.Put(SERVER_VERSION, 5); 363 entry.Put(SERVER_VERSION, 5);
364 entry.Put(SERVER_PARENT_ID, test->parent_id); 364 entry.Put(SERVER_PARENT_ID, test->parent_id);
365 } 365 }
366 entry.Put(syncable::IS_DIR, true); 366 entry.Put(syncable::IS_DIR, true);
367 entry.Put(syncable::IS_UNSYNCED, true); 367 entry.Put(syncable::IS_UNSYNCED, true);
368 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 368 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 451
452 int64 CreateUnsyncedDirectory(const string& entry_name, 452 int64 CreateUnsyncedDirectory(const string& entry_name,
453 const string& idstring) { 453 const string& idstring) {
454 return CreateUnsyncedDirectory(entry_name, 454 return CreateUnsyncedDirectory(entry_name,
455 syncable::Id::CreateFromServerId(idstring)); 455 syncable::Id::CreateFromServerId(idstring));
456 } 456 }
457 457
458 int64 CreateUnsyncedDirectory(const string& entry_name, 458 int64 CreateUnsyncedDirectory(const string& entry_name,
459 const syncable::Id& id) { 459 const syncable::Id& id) {
460 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 460 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
461 MutableEntry entry( 461 MutableEntry entry(&wtrans, syncable::CREATE, wtrans.root_id(),
462 &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), entry_name); 462 entry_name);
463 EXPECT_TRUE(entry.good()); 463 EXPECT_TRUE(entry.good());
464 entry.Put(syncable::IS_UNSYNCED, true); 464 entry.Put(syncable::IS_UNSYNCED, true);
465 entry.Put(syncable::IS_DIR, true); 465 entry.Put(syncable::IS_DIR, true);
466 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 466 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
467 entry.Put(syncable::BASE_VERSION, id.ServerKnows() ? 1 : 0); 467 entry.Put(syncable::BASE_VERSION, id.ServerKnows() ? 1 : 0);
468 entry.Put(syncable::ID, id); 468 entry.Put(syncable::ID, id);
469 return entry.Get(META_HANDLE); 469 return entry.Get(META_HANDLE);
470 } 470 }
471 471
472 void EnableDatatype(ModelType model_type) { 472 void EnableDatatype(ModelType model_type) {
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 VERIFY_ENTRY(2, false, false, false, 1, 31, 31, ids_, &rtrans); 980 VERIFY_ENTRY(2, false, false, false, 1, 31, 31, ids_, &rtrans);
981 VERIFY_ENTRY(3, false, false, false, 1, 30, 30, ids_, &rtrans); 981 VERIFY_ENTRY(3, false, false, false, 1, 30, 30, ids_, &rtrans);
982 VERIFY_ENTRY(4, false, false, false, 0, 31, 31, ids_, &rtrans); 982 VERIFY_ENTRY(4, false, false, false, 0, 31, 31, ids_, &rtrans);
983 } 983 }
984 984
985 #undef VERIFY_ENTRY 985 #undef VERIFY_ENTRY
986 986
987 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) { 987 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) {
988 { 988 {
989 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 989 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
990 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); 990 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(),
991 "Pete");
991 ASSERT_TRUE(parent.good()); 992 ASSERT_TRUE(parent.good());
992 parent.Put(syncable::IS_UNSYNCED, true); 993 parent.Put(syncable::IS_UNSYNCED, true);
993 parent.Put(syncable::IS_DIR, true); 994 parent.Put(syncable::IS_DIR, true);
994 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 995 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
995 parent.Put(syncable::BASE_VERSION, 1); 996 parent.Put(syncable::BASE_VERSION, 1);
996 parent.Put(syncable::ID, parent_id_); 997 parent.Put(syncable::ID, parent_id_);
997 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete"); 998 MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete");
998 ASSERT_TRUE(child.good()); 999 ASSERT_TRUE(child.good());
999 child.Put(syncable::ID, child_id_); 1000 child.Put(syncable::ID, child_id_);
1000 child.Put(syncable::BASE_VERSION, 1); 1001 child.Put(syncable::BASE_VERSION, 1);
1001 WriteTestDataToEntry(&wtrans, &child); 1002 WriteTestDataToEntry(&wtrans, &child);
1002 } 1003 }
1003 1004
1004 SyncShareNudge(); 1005 SyncShareNudge();
1005 ASSERT_EQ(2u, mock_server_->committed_ids().size()); 1006 ASSERT_EQ(2u, mock_server_->committed_ids().size());
1006 // If this test starts failing, be aware other sort orders could be valid. 1007 // If this test starts failing, be aware other sort orders could be valid.
1007 EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]); 1008 EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]);
1008 EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]); 1009 EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]);
1009 { 1010 {
1010 syncable::ReadTransaction rt(FROM_HERE, directory()); 1011 syncable::ReadTransaction rt(FROM_HERE, directory());
1011 Entry entry(&rt, syncable::GET_BY_ID, child_id_); 1012 Entry entry(&rt, syncable::GET_BY_ID, child_id_);
1012 ASSERT_TRUE(entry.good()); 1013 ASSERT_TRUE(entry.good());
1013 VerifyTestDataInEntry(&rt, &entry); 1014 VerifyTestDataInEntry(&rt, &entry);
1014 } 1015 }
1015 } 1016 }
1016 1017
1017 TEST_F(SyncerTest, TestPurgeWhileUnsynced) { 1018 TEST_F(SyncerTest, TestPurgeWhileUnsynced) {
1018 // Similar to above, but throw a purge operation into the mix. Bug 49278. 1019 // Similar to above, but throw a purge operation into the mix. Bug 49278.
1019 syncable::Id pref_node_id = TestIdFactory::MakeServer("Tim"); 1020 syncable::Id pref_node_id = TestIdFactory::MakeServer("Tim");
1020 { 1021 {
1021 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1022 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1022 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); 1023 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "Pete");
1023 ASSERT_TRUE(parent.good()); 1024 ASSERT_TRUE(parent.good());
1024 parent.Put(syncable::IS_UNSYNCED, true); 1025 parent.Put(syncable::IS_UNSYNCED, true);
1025 parent.Put(syncable::IS_DIR, true); 1026 parent.Put(syncable::IS_DIR, true);
1026 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1027 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1027 parent.Put(syncable::BASE_VERSION, 1); 1028 parent.Put(syncable::BASE_VERSION, 1);
1028 parent.Put(syncable::ID, parent_id_); 1029 parent.Put(syncable::ID, parent_id_);
1029 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete"); 1030 MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete");
1030 ASSERT_TRUE(child.good()); 1031 ASSERT_TRUE(child.good());
1031 child.Put(syncable::ID, child_id_); 1032 child.Put(syncable::ID, child_id_);
1032 child.Put(syncable::BASE_VERSION, 1); 1033 child.Put(syncable::BASE_VERSION, 1);
1033 WriteTestDataToEntry(&wtrans, &child); 1034 WriteTestDataToEntry(&wtrans, &child);
1034 1035
1035 MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Tim"); 1036 MutableEntry parent2(&wtrans, syncable::CREATE, wtrans.root_id(), "Tim");
1036 ASSERT_TRUE(parent2.good()); 1037 ASSERT_TRUE(parent2.good());
1037 parent2.Put(syncable::IS_UNSYNCED, true); 1038 parent2.Put(syncable::IS_UNSYNCED, true);
1038 parent2.Put(syncable::IS_DIR, true); 1039 parent2.Put(syncable::IS_DIR, true);
1039 parent2.Put(syncable::SPECIFICS, DefaultPreferencesSpecifics()); 1040 parent2.Put(syncable::SPECIFICS, DefaultPreferencesSpecifics());
1040 parent2.Put(syncable::BASE_VERSION, 1); 1041 parent2.Put(syncable::BASE_VERSION, 1);
1041 parent2.Put(syncable::ID, pref_node_id); 1042 parent2.Put(syncable::ID, pref_node_id);
1042 } 1043 }
1043 1044
1044 directory()->PurgeEntriesWithTypeIn(ModelTypeSet(PREFERENCES)); 1045 directory()->PurgeEntriesWithTypeIn(ModelTypeSet(PREFERENCES));
1045 1046
(...skipping 13 matching lines...) Expand all
1059 syncable::ReadTransaction rt(FROM_HERE, directory()); 1060 syncable::ReadTransaction rt(FROM_HERE, directory());
1060 Entry entry(&rt, syncable::GET_BY_ID, pref_node_id); 1061 Entry entry(&rt, syncable::GET_BY_ID, pref_node_id);
1061 ASSERT_FALSE(entry.good()); 1062 ASSERT_FALSE(entry.good());
1062 } 1063 }
1063 } 1064 }
1064 1065
1065 TEST_F(SyncerTest, TestPurgeWhileUnapplied) { 1066 TEST_F(SyncerTest, TestPurgeWhileUnapplied) {
1066 // Similar to above, but for unapplied items. Bug 49278. 1067 // Similar to above, but for unapplied items. Bug 49278.
1067 { 1068 {
1068 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1069 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1069 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); 1070 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "Pete");
1070 ASSERT_TRUE(parent.good()); 1071 ASSERT_TRUE(parent.good());
1071 parent.Put(syncable::IS_UNAPPLIED_UPDATE, true); 1072 parent.Put(syncable::IS_UNAPPLIED_UPDATE, true);
1072 parent.Put(syncable::IS_DIR, true); 1073 parent.Put(syncable::IS_DIR, true);
1073 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1074 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1074 parent.Put(syncable::BASE_VERSION, 1); 1075 parent.Put(syncable::BASE_VERSION, 1);
1075 parent.Put(syncable::ID, parent_id_); 1076 parent.Put(syncable::ID, parent_id_);
1076 } 1077 }
1077 1078
1078 directory()->PurgeEntriesWithTypeIn( 1079 directory()->PurgeEntriesWithTypeIn(
1079 ModelTypeSet(BOOKMARKS)); 1080 ModelTypeSet(BOOKMARKS));
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 }; 1215 };
1215 RunCommitOrderingTest(items); 1216 RunCommitOrderingTest(items);
1216 } 1217 }
1217 1218
1218 TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { 1219 TEST_F(SyncerTest, TestCommitListOrderingWithNesting) {
1219 const base::Time& now_minus_2h = 1220 const base::Time& now_minus_2h =
1220 base::Time::Now() - base::TimeDelta::FromHours(2); 1221 base::Time::Now() - base::TimeDelta::FromHours(2);
1221 { 1222 {
1222 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1223 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1223 { 1224 {
1224 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bob"); 1225 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(),
1226 "Bob");
1225 ASSERT_TRUE(parent.good()); 1227 ASSERT_TRUE(parent.good());
1226 parent.Put(syncable::IS_UNSYNCED, true); 1228 parent.Put(syncable::IS_UNSYNCED, true);
1227 parent.Put(syncable::IS_DIR, true); 1229 parent.Put(syncable::IS_DIR, true);
1228 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1230 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1229 parent.Put(syncable::ID, ids_.FromNumber(100)); 1231 parent.Put(syncable::ID, ids_.FromNumber(100));
1230 parent.Put(syncable::BASE_VERSION, 1); 1232 parent.Put(syncable::BASE_VERSION, 1);
1231 MutableEntry child( 1233 MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(100),
1232 &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(100), "Bob"); 1234 "Bob");
1233 ASSERT_TRUE(child.good()); 1235 ASSERT_TRUE(child.good());
1234 child.Put(syncable::IS_UNSYNCED, true); 1236 child.Put(syncable::IS_UNSYNCED, true);
1235 child.Put(syncable::IS_DIR, true); 1237 child.Put(syncable::IS_DIR, true);
1236 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1238 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1237 child.Put(syncable::ID, ids_.FromNumber(101)); 1239 child.Put(syncable::ID, ids_.FromNumber(101));
1238 child.Put(syncable::BASE_VERSION, 1); 1240 child.Put(syncable::BASE_VERSION, 1);
1239 MutableEntry grandchild( 1241 MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(101),
1240 &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(101), "Bob"); 1242 "Bob");
1241 ASSERT_TRUE(grandchild.good()); 1243 ASSERT_TRUE(grandchild.good());
1242 grandchild.Put(syncable::ID, ids_.FromNumber(102)); 1244 grandchild.Put(syncable::ID, ids_.FromNumber(102));
1243 grandchild.Put(syncable::IS_UNSYNCED, true); 1245 grandchild.Put(syncable::IS_UNSYNCED, true);
1244 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1246 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1245 grandchild.Put(syncable::BASE_VERSION, 1); 1247 grandchild.Put(syncable::BASE_VERSION, 1);
1246 } 1248 }
1247 { 1249 {
1248 // Create three deleted items which deletions we expect to be sent to the 1250 // Create three deleted items which deletions we expect to be sent to the
1249 // server. 1251 // server.
1250 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); 1252 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(),
1253 "Pete");
1251 ASSERT_TRUE(parent.good()); 1254 ASSERT_TRUE(parent.good());
1252 parent.Put(syncable::ID, ids_.FromNumber(103)); 1255 parent.Put(syncable::ID, ids_.FromNumber(103));
1253 parent.Put(syncable::IS_UNSYNCED, true); 1256 parent.Put(syncable::IS_UNSYNCED, true);
1254 parent.Put(syncable::IS_DIR, true); 1257 parent.Put(syncable::IS_DIR, true);
1255 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1258 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1256 parent.Put(syncable::IS_DEL, true); 1259 parent.Put(syncable::IS_DEL, true);
1257 parent.Put(syncable::BASE_VERSION, 1); 1260 parent.Put(syncable::BASE_VERSION, 1);
1258 parent.Put(syncable::MTIME, now_minus_2h); 1261 parent.Put(syncable::MTIME, now_minus_2h);
1259 MutableEntry child( 1262 MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(103),
1260 &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(103), "Pete"); 1263 "Pete");
1261 ASSERT_TRUE(child.good()); 1264 ASSERT_TRUE(child.good());
1262 child.Put(syncable::ID, ids_.FromNumber(104)); 1265 child.Put(syncable::ID, ids_.FromNumber(104));
1263 child.Put(syncable::IS_UNSYNCED, true); 1266 child.Put(syncable::IS_UNSYNCED, true);
1264 child.Put(syncable::IS_DIR, true); 1267 child.Put(syncable::IS_DIR, true);
1265 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1268 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1266 child.Put(syncable::IS_DEL, true); 1269 child.Put(syncable::IS_DEL, true);
1267 child.Put(syncable::BASE_VERSION, 1); 1270 child.Put(syncable::BASE_VERSION, 1);
1268 child.Put(syncable::MTIME, now_minus_2h); 1271 child.Put(syncable::MTIME, now_minus_2h);
1269 MutableEntry grandchild( 1272 MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(104),
1270 &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(104), "Pete"); 1273 "Pete");
1271 ASSERT_TRUE(grandchild.good()); 1274 ASSERT_TRUE(grandchild.good());
1272 grandchild.Put(syncable::ID, ids_.FromNumber(105)); 1275 grandchild.Put(syncable::ID, ids_.FromNumber(105));
1273 grandchild.Put(syncable::IS_UNSYNCED, true); 1276 grandchild.Put(syncable::IS_UNSYNCED, true);
1274 grandchild.Put(syncable::IS_DEL, true); 1277 grandchild.Put(syncable::IS_DEL, true);
1275 grandchild.Put(syncable::IS_DIR, false); 1278 grandchild.Put(syncable::IS_DIR, false);
1276 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1279 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1277 grandchild.Put(syncable::BASE_VERSION, 1); 1280 grandchild.Put(syncable::BASE_VERSION, 1);
1278 grandchild.Put(syncable::MTIME, now_minus_2h); 1281 grandchild.Put(syncable::MTIME, now_minus_2h);
1279 } 1282 }
1280 } 1283 }
1281 1284
1282 SyncShareNudge(); 1285 SyncShareNudge();
1283 ASSERT_EQ(6u, mock_server_->committed_ids().size()); 1286 ASSERT_EQ(6u, mock_server_->committed_ids().size());
1284 // This test will NOT unroll deletes because SERVER_PARENT_ID is not set. 1287 // This test will NOT unroll deletes because SERVER_PARENT_ID is not set.
1285 // It will treat these like moves. 1288 // It will treat these like moves.
1286 vector<syncable::Id> commit_ids(mock_server_->committed_ids()); 1289 vector<syncable::Id> commit_ids(mock_server_->committed_ids());
1287 EXPECT_TRUE(ids_.FromNumber(100) == commit_ids[0]); 1290 EXPECT_TRUE(ids_.FromNumber(100) == commit_ids[0]);
1288 EXPECT_TRUE(ids_.FromNumber(101) == commit_ids[1]); 1291 EXPECT_TRUE(ids_.FromNumber(101) == commit_ids[1]);
1289 EXPECT_TRUE(ids_.FromNumber(102) == commit_ids[2]); 1292 EXPECT_TRUE(ids_.FromNumber(102) == commit_ids[2]);
1290 // We don't guarantee the delete orders in this test, only that they occur 1293 // We don't guarantee the delete orders in this test, only that they occur
1291 // at the end. 1294 // at the end.
1292 std::sort(commit_ids.begin() + 3, commit_ids.end()); 1295 std::sort(commit_ids.begin() + 3, commit_ids.end());
1293 EXPECT_TRUE(ids_.FromNumber(103) == commit_ids[3]); 1296 EXPECT_TRUE(ids_.FromNumber(103) == commit_ids[3]);
1294 EXPECT_TRUE(ids_.FromNumber(104) == commit_ids[4]); 1297 EXPECT_TRUE(ids_.FromNumber(104) == commit_ids[4]);
1295 EXPECT_TRUE(ids_.FromNumber(105) == commit_ids[5]); 1298 EXPECT_TRUE(ids_.FromNumber(105) == commit_ids[5]);
1296 } 1299 }
1297 1300
1298 TEST_F(SyncerTest, TestCommitListOrderingWithNewItems) { 1301 TEST_F(SyncerTest, TestCommitListOrderingWithNewItems) {
1299 syncable::Id parent1_id = ids_.MakeServer("p1");
1300 syncable::Id parent2_id = ids_.MakeServer("p2");
1301
1302 { 1302 {
1303 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1303 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1304 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "1"); 1304 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "1");
1305 ASSERT_TRUE(parent.good()); 1305 ASSERT_TRUE(parent.good());
1306 parent.Put(syncable::IS_UNSYNCED, true); 1306 parent.Put(syncable::IS_UNSYNCED, true);
1307 parent.Put(syncable::IS_DIR, true); 1307 parent.Put(syncable::IS_DIR, true);
1308 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1308 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1309 parent.Put(syncable::ID, parent1_id); 1309 parent.Put(syncable::ID, parent_id_);
1310 MutableEntry child(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "2"); 1310 MutableEntry child(&wtrans, syncable::CREATE, wtrans.root_id(), "2");
1311 ASSERT_TRUE(child.good()); 1311 ASSERT_TRUE(child.good());
1312 child.Put(syncable::IS_UNSYNCED, true); 1312 child.Put(syncable::IS_UNSYNCED, true);
1313 child.Put(syncable::IS_DIR, true); 1313 child.Put(syncable::IS_DIR, true);
1314 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1314 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1315 child.Put(syncable::ID, parent2_id); 1315 child.Put(syncable::ID, child_id_);
1316 parent.Put(syncable::BASE_VERSION, 1); 1316 parent.Put(syncable::BASE_VERSION, 1);
1317 child.Put(syncable::BASE_VERSION, 1); 1317 child.Put(syncable::BASE_VERSION, 1);
1318 } 1318 }
1319 { 1319 {
1320 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1320 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1321 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, parent1_id, "A"); 1321 MutableEntry parent(&wtrans, syncable::CREATE, parent_id_, "A");
1322 ASSERT_TRUE(parent.good()); 1322 ASSERT_TRUE(parent.good());
1323 parent.Put(syncable::IS_UNSYNCED, true); 1323 parent.Put(syncable::IS_UNSYNCED, true);
1324 parent.Put(syncable::IS_DIR, true); 1324 parent.Put(syncable::IS_DIR, true);
1325 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1325 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1326 parent.Put(syncable::ID, ids_.FromNumber(102)); 1326 parent.Put(syncable::ID, ids_.FromNumber(102));
1327 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent1_id, "B"); 1327 MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "B");
1328 ASSERT_TRUE(child.good()); 1328 ASSERT_TRUE(child.good());
1329 child.Put(syncable::IS_UNSYNCED, true); 1329 child.Put(syncable::IS_UNSYNCED, true);
1330 child.Put(syncable::IS_DIR, true); 1330 child.Put(syncable::IS_DIR, true);
1331 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1331 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1332 child.Put(syncable::ID, ids_.FromNumber(-103)); 1332 child.Put(syncable::ID, ids_.FromNumber(-103));
1333 parent.Put(syncable::BASE_VERSION, 1); 1333 parent.Put(syncable::BASE_VERSION, 1);
1334 } 1334 }
1335 { 1335 {
1336 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1336 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1337 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, parent2_id, "A"); 1337 MutableEntry parent(&wtrans, syncable::CREATE, child_id_, "A");
1338 ASSERT_TRUE(parent.good()); 1338 ASSERT_TRUE(parent.good());
1339 parent.Put(syncable::IS_UNSYNCED, true); 1339 parent.Put(syncable::IS_UNSYNCED, true);
1340 parent.Put(syncable::IS_DIR, true); 1340 parent.Put(syncable::IS_DIR, true);
1341 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1341 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1342 parent.Put(syncable::ID, ids_.FromNumber(-104)); 1342 parent.Put(syncable::ID, ids_.FromNumber(-104));
1343 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent2_id, "B"); 1343 MutableEntry child(&wtrans, syncable::CREATE, child_id_, "B");
1344 ASSERT_TRUE(child.good()); 1344 ASSERT_TRUE(child.good());
1345 child.Put(syncable::IS_UNSYNCED, true); 1345 child.Put(syncable::IS_UNSYNCED, true);
1346 child.Put(syncable::IS_DIR, true); 1346 child.Put(syncable::IS_DIR, true);
1347 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1347 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1348 child.Put(syncable::ID, ids_.FromNumber(105)); 1348 child.Put(syncable::ID, ids_.FromNumber(105));
1349 child.Put(syncable::BASE_VERSION, 1); 1349 child.Put(syncable::BASE_VERSION, 1);
1350 } 1350 }
1351 1351
1352 SyncShareNudge(); 1352 SyncShareNudge();
1353 ASSERT_EQ(6u, mock_server_->committed_ids().size()); 1353 ASSERT_EQ(6u, mock_server_->committed_ids().size());
1354 // If this test starts failing, be aware other sort orders could be valid. 1354 // If this test starts failing, be aware other sort orders could be valid.
1355 EXPECT_TRUE(parent1_id == mock_server_->committed_ids()[0]); 1355 EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]);
1356 EXPECT_TRUE(parent2_id == mock_server_->committed_ids()[1]); 1356 EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]);
1357 EXPECT_TRUE(ids_.FromNumber(102) == mock_server_->committed_ids()[2]); 1357 EXPECT_TRUE(ids_.FromNumber(102) == mock_server_->committed_ids()[2]);
1358 EXPECT_TRUE(ids_.FromNumber(-103) == mock_server_->committed_ids()[3]); 1358 EXPECT_TRUE(ids_.FromNumber(-103) == mock_server_->committed_ids()[3]);
1359 EXPECT_TRUE(ids_.FromNumber(-104) == mock_server_->committed_ids()[4]); 1359 EXPECT_TRUE(ids_.FromNumber(-104) == mock_server_->committed_ids()[4]);
1360 EXPECT_TRUE(ids_.FromNumber(105) == mock_server_->committed_ids()[5]); 1360 EXPECT_TRUE(ids_.FromNumber(105) == mock_server_->committed_ids()[5]);
1361 } 1361 }
1362 1362
1363 TEST_F(SyncerTest, TestCommitListOrderingCounterexample) { 1363 TEST_F(SyncerTest, TestCommitListOrderingCounterexample) {
1364 syncable::Id child2_id = ids_.NewServerId(); 1364 syncable::Id child2_id = ids_.NewServerId();
1365 1365
1366 { 1366 {
1367 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1367 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1368 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "P"); 1368 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "P");
1369 ASSERT_TRUE(parent.good()); 1369 ASSERT_TRUE(parent.good());
1370 parent.Put(syncable::IS_UNSYNCED, true); 1370 parent.Put(syncable::IS_UNSYNCED, true);
1371 parent.Put(syncable::IS_DIR, true); 1371 parent.Put(syncable::IS_DIR, true);
1372 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1372 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1373 parent.Put(syncable::ID, parent_id_); 1373 parent.Put(syncable::ID, parent_id_);
1374 MutableEntry child1(&wtrans, CREATE, BOOKMARKS, parent_id_, "1"); 1374 MutableEntry child1(&wtrans, syncable::CREATE, parent_id_, "1");
1375 ASSERT_TRUE(child1.good()); 1375 ASSERT_TRUE(child1.good());
1376 child1.Put(syncable::IS_UNSYNCED, true); 1376 child1.Put(syncable::IS_UNSYNCED, true);
1377 child1.Put(syncable::ID, child_id_); 1377 child1.Put(syncable::ID, child_id_);
1378 child1.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1378 child1.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1379 MutableEntry child2(&wtrans, CREATE, BOOKMARKS, parent_id_, "2"); 1379 MutableEntry child2(&wtrans, syncable::CREATE, parent_id_, "2");
1380 ASSERT_TRUE(child2.good()); 1380 ASSERT_TRUE(child2.good());
1381 child2.Put(syncable::IS_UNSYNCED, true); 1381 child2.Put(syncable::IS_UNSYNCED, true);
1382 child2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1382 child2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1383 child2.Put(syncable::ID, child2_id); 1383 child2.Put(syncable::ID, child2_id);
1384 1384
1385 parent.Put(syncable::BASE_VERSION, 1); 1385 parent.Put(syncable::BASE_VERSION, 1);
1386 child1.Put(syncable::BASE_VERSION, 1); 1386 child1.Put(syncable::BASE_VERSION, 1);
1387 child2.Put(syncable::BASE_VERSION, 1); 1387 child2.Put(syncable::BASE_VERSION, 1);
1388 } 1388 }
1389 1389
1390 SyncShareNudge(); 1390 SyncShareNudge();
1391 ASSERT_EQ(3u, mock_server_->committed_ids().size()); 1391 ASSERT_EQ(3u, mock_server_->committed_ids().size());
1392 // If this test starts failing, be aware other sort orders could be valid. 1392 // If this test starts failing, be aware other sort orders could be valid.
1393 EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]); 1393 EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]);
1394 EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]); 1394 EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]);
1395 EXPECT_TRUE(child2_id == mock_server_->committed_ids()[2]); 1395 EXPECT_TRUE(child2_id == mock_server_->committed_ids()[2]);
1396 } 1396 }
1397 1397
1398 TEST_F(SyncerTest, TestCommitListOrderingAndNewParent) { 1398 TEST_F(SyncerTest, TestCommitListOrderingAndNewParent) {
1399 string parent1_name = "1"; 1399 string parent1_name = "1";
1400 string parent2_name = "A"; 1400 string parent2_name = "A";
1401 string child_name = "B"; 1401 string child_name = "B";
1402 1402
1403 { 1403 {
1404 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1404 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1405 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), 1405 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(),
1406 parent1_name); 1406 parent1_name);
1407 ASSERT_TRUE(parent.good()); 1407 ASSERT_TRUE(parent.good());
1408 parent.Put(syncable::IS_UNSYNCED, true); 1408 parent.Put(syncable::IS_UNSYNCED, true);
1409 parent.Put(syncable::IS_DIR, true); 1409 parent.Put(syncable::IS_DIR, true);
1410 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1410 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1411 parent.Put(syncable::ID, parent_id_); 1411 parent.Put(syncable::ID, parent_id_);
1412 parent.Put(syncable::BASE_VERSION, 1); 1412 parent.Put(syncable::BASE_VERSION, 1);
1413 } 1413 }
1414 1414
1415 syncable::Id parent2_id = ids_.NewLocalId(); 1415 syncable::Id parent2_id = ids_.NewLocalId();
1416 syncable::Id child_id = ids_.NewServerId(); 1416 syncable::Id child_id = ids_.NewServerId();
1417 { 1417 {
1418 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1418 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1419 MutableEntry parent2( 1419 MutableEntry parent2(&wtrans, syncable::CREATE, parent_id_, parent2_name);
1420 &wtrans, CREATE, BOOKMARKS, parent_id_, parent2_name);
1421 ASSERT_TRUE(parent2.good()); 1420 ASSERT_TRUE(parent2.good());
1422 parent2.Put(syncable::IS_UNSYNCED, true); 1421 parent2.Put(syncable::IS_UNSYNCED, true);
1423 parent2.Put(syncable::IS_DIR, true); 1422 parent2.Put(syncable::IS_DIR, true);
1424 parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1423 parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1425 parent2.Put(syncable::ID, parent2_id); 1424 parent2.Put(syncable::ID, parent2_id);
1426 1425
1427 MutableEntry child( 1426 MutableEntry child(&wtrans, syncable::CREATE, parent2_id, child_name);
1428 &wtrans, CREATE, BOOKMARKS, parent2_id, child_name);
1429 ASSERT_TRUE(child.good()); 1427 ASSERT_TRUE(child.good());
1430 child.Put(syncable::IS_UNSYNCED, true); 1428 child.Put(syncable::IS_UNSYNCED, true);
1431 child.Put(syncable::IS_DIR, true); 1429 child.Put(syncable::IS_DIR, true);
1432 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1430 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1433 child.Put(syncable::ID, child_id); 1431 child.Put(syncable::ID, child_id);
1434 child.Put(syncable::BASE_VERSION, 1); 1432 child.Put(syncable::BASE_VERSION, 1);
1435 } 1433 }
1436 1434
1437 SyncShareNudge(); 1435 SyncShareNudge();
1438 ASSERT_EQ(3u, mock_server_->committed_ids().size()); 1436 ASSERT_EQ(3u, mock_server_->committed_ids().size());
(...skipping 26 matching lines...) Expand all
1465 } 1463 }
1466 1464
1467 TEST_F(SyncerTest, TestCommitListOrderingAndNewParentAndChild) { 1465 TEST_F(SyncerTest, TestCommitListOrderingAndNewParentAndChild) {
1468 string parent_name = "1"; 1466 string parent_name = "1";
1469 string parent2_name = "A"; 1467 string parent2_name = "A";
1470 string child_name = "B"; 1468 string child_name = "B";
1471 1469
1472 { 1470 {
1473 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1471 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1474 MutableEntry parent(&wtrans, 1472 MutableEntry parent(&wtrans,
1475 CREATE, BOOKMARKS, 1473 syncable::CREATE,
1476 wtrans.root_id(), 1474 wtrans.root_id(),
1477 parent_name); 1475 parent_name);
1478 ASSERT_TRUE(parent.good()); 1476 ASSERT_TRUE(parent.good());
1479 parent.Put(syncable::IS_UNSYNCED, true); 1477 parent.Put(syncable::IS_UNSYNCED, true);
1480 parent.Put(syncable::IS_DIR, true); 1478 parent.Put(syncable::IS_DIR, true);
1481 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1479 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1482 parent.Put(syncable::ID, parent_id_); 1480 parent.Put(syncable::ID, parent_id_);
1483 parent.Put(syncable::BASE_VERSION, 1); 1481 parent.Put(syncable::BASE_VERSION, 1);
1484 } 1482 }
1485 1483
1486 int64 meta_handle_b; 1484 int64 meta_handle_b;
1487 const Id parent2_local_id = ids_.NewLocalId(); 1485 const Id parent2_local_id = ids_.NewLocalId();
1488 const Id child_local_id = ids_.NewLocalId(); 1486 const Id child_local_id = ids_.NewLocalId();
1489 { 1487 {
1490 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 1488 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
1491 MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, parent_id_, parent2_name); 1489 MutableEntry parent2(&wtrans, syncable::CREATE, parent_id_, parent2_name);
1492 ASSERT_TRUE(parent2.good()); 1490 ASSERT_TRUE(parent2.good());
1493 parent2.Put(syncable::IS_UNSYNCED, true); 1491 parent2.Put(syncable::IS_UNSYNCED, true);
1494 parent2.Put(syncable::IS_DIR, true); 1492 parent2.Put(syncable::IS_DIR, true);
1495 parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1493 parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1496 1494
1497 parent2.Put(syncable::ID, parent2_local_id); 1495 parent2.Put(syncable::ID, parent2_local_id);
1498 MutableEntry child( 1496 MutableEntry child(&wtrans, syncable::CREATE, parent2_local_id, child_name);
1499 &wtrans, CREATE, BOOKMARKS, parent2_local_id, child_name);
1500 ASSERT_TRUE(child.good()); 1497 ASSERT_TRUE(child.good());
1501 child.Put(syncable::IS_UNSYNCED, true); 1498 child.Put(syncable::IS_UNSYNCED, true);
1502 child.Put(syncable::IS_DIR, true); 1499 child.Put(syncable::IS_DIR, true);
1503 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1500 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1504 child.Put(syncable::ID, child_local_id); 1501 child.Put(syncable::ID, child_local_id);
1505 meta_handle_b = child.Get(syncable::META_HANDLE); 1502 meta_handle_b = child.Get(syncable::META_HANDLE);
1506 } 1503 }
1507 1504
1508 SyncShareNudge(); 1505 SyncShareNudge();
1509 ASSERT_EQ(3u, mock_server_->committed_ids().size()); 1506 ASSERT_EQ(3u, mock_server_->committed_ids().size());
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 EXPECT_EQ(4, status().num_hierarchy_conflicts()); 1704 EXPECT_EQ(4, status().num_hierarchy_conflicts());
1708 } 1705 }
1709 1706
1710 TEST_F(SyncerTest, CommitTimeRename) { 1707 TEST_F(SyncerTest, CommitTimeRename) {
1711 int64 metahandle_folder; 1708 int64 metahandle_folder;
1712 int64 metahandle_new_entry; 1709 int64 metahandle_new_entry;
1713 1710
1714 // Create a folder and an entry. 1711 // Create a folder and an entry.
1715 { 1712 {
1716 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1713 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1717 MutableEntry parent(&trans, CREATE, BOOKMARKS, root_id_, "Folder"); 1714 MutableEntry parent(&trans, CREATE, root_id_, "Folder");
1718 ASSERT_TRUE(parent.good()); 1715 ASSERT_TRUE(parent.good());
1719 parent.Put(IS_DIR, true); 1716 parent.Put(IS_DIR, true);
1720 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 1717 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
1721 parent.Put(IS_UNSYNCED, true); 1718 parent.Put(IS_UNSYNCED, true);
1722 metahandle_folder = parent.Get(META_HANDLE); 1719 metahandle_folder = parent.Get(META_HANDLE);
1723 1720
1724 MutableEntry entry(&trans, CREATE, BOOKMARKS, parent.Get(ID), "new_entry"); 1721 MutableEntry entry(&trans, CREATE, parent.Get(ID), "new_entry");
1725 ASSERT_TRUE(entry.good()); 1722 ASSERT_TRUE(entry.good());
1726 metahandle_new_entry = entry.Get(META_HANDLE); 1723 metahandle_new_entry = entry.Get(META_HANDLE);
1727 WriteTestDataToEntry(&trans, &entry); 1724 WriteTestDataToEntry(&trans, &entry);
1728 } 1725 }
1729 1726
1730 // Mix in a directory creation too for later. 1727 // Mix in a directory creation too for later.
1731 mock_server_->AddUpdateDirectory(2, 0, "dir_in_root", 10, 10); 1728 mock_server_->AddUpdateDirectory(2, 0, "dir_in_root", 10, 10);
1732 mock_server_->SetCommitTimeRename("renamed_"); 1729 mock_server_->SetCommitTimeRename("renamed_");
1733 SyncShareNudge(); 1730 SyncShareNudge();
1734 1731
(...skipping 20 matching lines...) Expand all
1755 TEST_F(SyncerTest, CommitTimeRenameI18N) { 1752 TEST_F(SyncerTest, CommitTimeRenameI18N) {
1756 // This is utf-8 for the diacritized Internationalization. 1753 // This is utf-8 for the diacritized Internationalization.
1757 const char* i18nString = "\xc3\x8e\xc3\xb1\x74\xc3\xa9\x72\xc3\xb1" 1754 const char* i18nString = "\xc3\x8e\xc3\xb1\x74\xc3\xa9\x72\xc3\xb1"
1758 "\xc3\xa5\x74\xc3\xae\xc3\xb6\xc3\xb1\xc3\xa5\x6c\xc3\xae" 1755 "\xc3\xa5\x74\xc3\xae\xc3\xb6\xc3\xb1\xc3\xa5\x6c\xc3\xae"
1759 "\xc2\x9e\xc3\xa5\x74\xc3\xae\xc3\xb6\xc3\xb1"; 1756 "\xc2\x9e\xc3\xa5\x74\xc3\xae\xc3\xb6\xc3\xb1";
1760 1757
1761 int64 metahandle; 1758 int64 metahandle;
1762 // Create a folder, expect a commit time rename. 1759 // Create a folder, expect a commit time rename.
1763 { 1760 {
1764 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1761 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1765 MutableEntry parent(&trans, CREATE, BOOKMARKS, root_id_, "Folder"); 1762 MutableEntry parent(&trans, CREATE, root_id_, "Folder");
1766 ASSERT_TRUE(parent.good()); 1763 ASSERT_TRUE(parent.good());
1767 parent.Put(IS_DIR, true); 1764 parent.Put(IS_DIR, true);
1768 parent.Put(SPECIFICS, DefaultBookmarkSpecifics()); 1765 parent.Put(SPECIFICS, DefaultBookmarkSpecifics());
1769 parent.Put(IS_UNSYNCED, true); 1766 parent.Put(IS_UNSYNCED, true);
1770 metahandle = parent.Get(META_HANDLE); 1767 metahandle = parent.Get(META_HANDLE);
1771 } 1768 }
1772 1769
1773 mock_server_->SetCommitTimeRename(i18nString); 1770 mock_server_->SetCommitTimeRename(i18nString);
1774 SyncShareNudge(); 1771 SyncShareNudge();
1775 1772
(...skipping 10 matching lines...) Expand all
1786 } 1783 }
1787 } 1784 }
1788 1785
1789 // A commit with a lost response produces an update that has to be reunited with 1786 // A commit with a lost response produces an update that has to be reunited with
1790 // its parent. 1787 // its parent.
1791 TEST_F(SyncerTest, CommitReuniteUpdateAdjustsChildren) { 1788 TEST_F(SyncerTest, CommitReuniteUpdateAdjustsChildren) {
1792 // Create a folder in the root. 1789 // Create a folder in the root.
1793 int64 metahandle_folder; 1790 int64 metahandle_folder;
1794 { 1791 {
1795 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1792 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1796 MutableEntry entry( 1793 MutableEntry entry(&trans, CREATE, trans.root_id(), "new_folder");
1797 &trans, CREATE, BOOKMARKS, trans.root_id(), "new_folder");
1798 ASSERT_TRUE(entry.good()); 1794 ASSERT_TRUE(entry.good());
1799 entry.Put(IS_DIR, true); 1795 entry.Put(IS_DIR, true);
1800 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); 1796 entry.Put(SPECIFICS, DefaultBookmarkSpecifics());
1801 entry.Put(IS_UNSYNCED, true); 1797 entry.Put(IS_UNSYNCED, true);
1802 metahandle_folder = entry.Get(META_HANDLE); 1798 metahandle_folder = entry.Get(META_HANDLE);
1803 } 1799 }
1804 1800
1805 // Verify it and pull the ID out of the folder. 1801 // Verify it and pull the ID out of the folder.
1806 syncable::Id folder_id; 1802 syncable::Id folder_id;
1807 int64 metahandle_entry; 1803 int64 metahandle_entry;
1808 { 1804 {
1809 syncable::ReadTransaction trans(FROM_HERE, directory()); 1805 syncable::ReadTransaction trans(FROM_HERE, directory());
1810 Entry entry(&trans, GET_BY_HANDLE, metahandle_folder); 1806 Entry entry(&trans, GET_BY_HANDLE, metahandle_folder);
1811 ASSERT_TRUE(entry.good()); 1807 ASSERT_TRUE(entry.good());
1812 folder_id = entry.Get(ID); 1808 folder_id = entry.Get(ID);
1813 ASSERT_TRUE(!folder_id.ServerKnows()); 1809 ASSERT_TRUE(!folder_id.ServerKnows());
1814 } 1810 }
1815 1811
1816 // Create an entry in the newly created folder. 1812 // Create an entry in the newly created folder.
1817 { 1813 {
1818 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1814 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1819 MutableEntry entry(&trans, CREATE, BOOKMARKS, folder_id, "new_entry"); 1815 MutableEntry entry(&trans, CREATE, folder_id, "new_entry");
1820 ASSERT_TRUE(entry.good()); 1816 ASSERT_TRUE(entry.good());
1821 metahandle_entry = entry.Get(META_HANDLE); 1817 metahandle_entry = entry.Get(META_HANDLE);
1822 WriteTestDataToEntry(&trans, &entry); 1818 WriteTestDataToEntry(&trans, &entry);
1823 } 1819 }
1824 1820
1825 // Verify it and pull the ID out of the entry. 1821 // Verify it and pull the ID out of the entry.
1826 syncable::Id entry_id; 1822 syncable::Id entry_id;
1827 { 1823 {
1828 syncable::ReadTransaction trans(FROM_HERE, directory()); 1824 syncable::ReadTransaction trans(FROM_HERE, directory());
1829 Entry entry(&trans, syncable::GET_BY_HANDLE, metahandle_entry); 1825 Entry entry(&trans, syncable::GET_BY_HANDLE, metahandle_entry);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 } 1874 }
1879 } 1875 }
1880 1876
1881 // A commit with a lost response produces an update that has to be reunited with 1877 // A commit with a lost response produces an update that has to be reunited with
1882 // its parent. 1878 // its parent.
1883 TEST_F(SyncerTest, CommitReuniteUpdate) { 1879 TEST_F(SyncerTest, CommitReuniteUpdate) {
1884 // Create an entry in the root. 1880 // Create an entry in the root.
1885 int64 entry_metahandle; 1881 int64 entry_metahandle;
1886 { 1882 {
1887 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1883 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1888 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "new_entry"); 1884 MutableEntry entry(&trans, CREATE, trans.root_id(), "new_entry");
1889 ASSERT_TRUE(entry.good()); 1885 ASSERT_TRUE(entry.good());
1890 entry_metahandle = entry.Get(META_HANDLE); 1886 entry_metahandle = entry.Get(META_HANDLE);
1891 WriteTestDataToEntry(&trans, &entry); 1887 WriteTestDataToEntry(&trans, &entry);
1892 } 1888 }
1893 1889
1894 // Verify it and pull the ID out. 1890 // Verify it and pull the ID out.
1895 syncable::Id entry_id; 1891 syncable::Id entry_id;
1896 { 1892 {
1897 syncable::ReadTransaction trans(FROM_HERE, directory()); 1893 syncable::ReadTransaction trans(FROM_HERE, directory());
1898 1894
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1932 // A commit with a lost response must work even if the local entry was deleted 1928 // A commit with a lost response must work even if the local entry was deleted
1933 // before the update is applied. We should not duplicate the local entry in 1929 // before the update is applied. We should not duplicate the local entry in
1934 // this case, but just create another one alongside. We may wish to examine 1930 // this case, but just create another one alongside. We may wish to examine
1935 // this behavior in the future as it can create hanging uploads that never 1931 // this behavior in the future as it can create hanging uploads that never
1936 // finish, that must be cleaned up on the server side after some time. 1932 // finish, that must be cleaned up on the server side after some time.
1937 TEST_F(SyncerTest, CommitReuniteUpdateDoesNotChokeOnDeletedLocalEntry) { 1933 TEST_F(SyncerTest, CommitReuniteUpdateDoesNotChokeOnDeletedLocalEntry) {
1938 // Create a entry in the root. 1934 // Create a entry in the root.
1939 int64 entry_metahandle; 1935 int64 entry_metahandle;
1940 { 1936 {
1941 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 1937 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
1942 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "new_entry"); 1938 MutableEntry entry(&trans, CREATE, trans.root_id(), "new_entry");
1943 ASSERT_TRUE(entry.good()); 1939 ASSERT_TRUE(entry.good());
1944 entry_metahandle = entry.Get(META_HANDLE); 1940 entry_metahandle = entry.Get(META_HANDLE);
1945 WriteTestDataToEntry(&trans, &entry); 1941 WriteTestDataToEntry(&trans, &entry);
1946 } 1942 }
1947 // Verify it and pull the ID out. 1943 // Verify it and pull the ID out.
1948 syncable::Id entry_id; 1944 syncable::Id entry_id;
1949 { 1945 {
1950 syncable::ReadTransaction trans(FROM_HERE, directory()); 1946 syncable::ReadTransaction trans(FROM_HERE, directory());
1951 Entry entry(&trans, GET_BY_HANDLE, entry_metahandle); 1947 Entry entry(&trans, GET_BY_HANDLE, entry_metahandle);
1952 ASSERT_TRUE(entry.good()); 1948 ASSERT_TRUE(entry.good());
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 public: 2092 public:
2097 void CreateFolderInBob() { 2093 void CreateFolderInBob() {
2098 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2094 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2099 MutableEntry bob(&trans, 2095 MutableEntry bob(&trans,
2100 syncable::GET_BY_ID, 2096 syncable::GET_BY_ID,
2101 GetOnlyEntryWithName(&trans, 2097 GetOnlyEntryWithName(&trans,
2102 TestIdFactory::root(), 2098 TestIdFactory::root(),
2103 "bob")); 2099 "bob"));
2104 CHECK(bob.good()); 2100 CHECK(bob.good());
2105 2101
2106 MutableEntry entry2( 2102 MutableEntry entry2(&trans, syncable::CREATE, bob.Get(syncable::ID),
2107 &trans, CREATE, BOOKMARKS, bob.Get(syncable::ID), "bob"); 2103 "bob");
2108 CHECK(entry2.good()); 2104 CHECK(entry2.good());
2109 entry2.Put(syncable::IS_DIR, true); 2105 entry2.Put(syncable::IS_DIR, true);
2110 entry2.Put(syncable::IS_UNSYNCED, true); 2106 entry2.Put(syncable::IS_UNSYNCED, true);
2111 entry2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 2107 entry2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
2112 } 2108 }
2113 }; 2109 };
2114 2110
2115 TEST_F(EntryCreatedInNewFolderTest, EntryCreatedInNewFolderMidSync) { 2111 TEST_F(EntryCreatedInNewFolderTest, EntryCreatedInNewFolderMidSync) {
2116 { 2112 {
2117 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2113 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2118 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); 2114 MutableEntry entry(&trans, syncable::CREATE, trans.root_id(),
2115 "bob");
2119 ASSERT_TRUE(entry.good()); 2116 ASSERT_TRUE(entry.good());
2120 entry.Put(syncable::IS_DIR, true); 2117 entry.Put(syncable::IS_DIR, true);
2121 entry.Put(syncable::IS_UNSYNCED, true); 2118 entry.Put(syncable::IS_UNSYNCED, true);
2122 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 2119 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
2123 } 2120 }
2124 2121
2125 mock_server_->SetMidCommitCallback( 2122 mock_server_->SetMidCommitCallback(
2126 base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob, 2123 base::Bind(&EntryCreatedInNewFolderTest::CreateFolderInBob,
2127 base::Unretained(this))); 2124 base::Unretained(this)));
2128 syncer_->SyncShare(session_.get(), COMMIT, SYNCER_END); 2125 syncer_->SyncShare(session_.get(), COMMIT, SYNCER_END);
(...skipping 17 matching lines...) Expand all
2146 mock_server_->AddUpdateBookmark(-10, 0, "bad", 40, 40); 2143 mock_server_->AddUpdateBookmark(-10, 0, "bad", 40, 40);
2147 SyncShareNudge(); 2144 SyncShareNudge();
2148 // The negative id would make us CHECK! 2145 // The negative id would make us CHECK!
2149 } 2146 }
2150 2147
2151 TEST_F(SyncerTest, UnappliedUpdateOnCreatedItemItemDoesNotCrash) { 2148 TEST_F(SyncerTest, UnappliedUpdateOnCreatedItemItemDoesNotCrash) {
2152 int64 metahandle_fred; 2149 int64 metahandle_fred;
2153 { 2150 {
2154 // Create an item. 2151 // Create an item.
2155 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2152 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2156 MutableEntry fred_match(&trans, CREATE, BOOKMARKS, trans.root_id(), 2153 MutableEntry fred_match(&trans, CREATE, trans.root_id(),
2157 "fred_match"); 2154 "fred_match");
2158 ASSERT_TRUE(fred_match.good()); 2155 ASSERT_TRUE(fred_match.good());
2159 metahandle_fred = fred_match.Get(META_HANDLE); 2156 metahandle_fred = fred_match.Get(META_HANDLE);
2160 WriteTestDataToEntry(&trans, &fred_match); 2157 WriteTestDataToEntry(&trans, &fred_match);
2161 } 2158 }
2162 // Commit it. 2159 // Commit it.
2163 SyncShareNudge(); 2160 SyncShareNudge();
2164 EXPECT_EQ(1u, mock_server_->committed_ids().size()); 2161 EXPECT_EQ(1u, mock_server_->committed_ids().size());
2165 mock_server_->set_conflict_all_commits(true); 2162 mock_server_->set_conflict_all_commits(true);
2166 syncable::Id fred_match_id; 2163 syncable::Id fred_match_id;
(...skipping 15 matching lines...) Expand all
2182 2179
2183 /** 2180 /**
2184 * In the event that we have a double changed entry, that is changed on both 2181 * In the event that we have a double changed entry, that is changed on both
2185 * the client and the server, the conflict resolver should just drop one of 2182 * the client and the server, the conflict resolver should just drop one of
2186 * them and accept the other. 2183 * them and accept the other.
2187 */ 2184 */
2188 2185
2189 TEST_F(SyncerTest, DoublyChangedWithResolver) { 2186 TEST_F(SyncerTest, DoublyChangedWithResolver) {
2190 { 2187 {
2191 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 2188 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
2192 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "Folder"); 2189 MutableEntry parent(&wtrans, syncable::CREATE, root_id_, "Folder");
2193 ASSERT_TRUE(parent.good()); 2190 ASSERT_TRUE(parent.good());
2194 parent.Put(syncable::IS_DIR, true); 2191 parent.Put(syncable::IS_DIR, true);
2195 parent.Put(syncable::ID, parent_id_); 2192 parent.Put(syncable::ID, parent_id_);
2196 parent.Put(syncable::BASE_VERSION, 5); 2193 parent.Put(syncable::BASE_VERSION, 5);
2197 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 2194 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
2198 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete.htm"); 2195 MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete.htm");
2199 ASSERT_TRUE(child.good()); 2196 ASSERT_TRUE(child.good());
2200 child.Put(syncable::ID, child_id_); 2197 child.Put(syncable::ID, child_id_);
2201 child.Put(syncable::BASE_VERSION, 10); 2198 child.Put(syncable::BASE_VERSION, 10);
2202 WriteTestDataToEntry(&wtrans, &child); 2199 WriteTestDataToEntry(&wtrans, &child);
2203 } 2200 }
2204 mock_server_->AddUpdateBookmark(child_id_, parent_id_, "Pete2.htm", 11, 10); 2201 mock_server_->AddUpdateBookmark(child_id_, parent_id_, "Pete2.htm", 11, 10);
2205 mock_server_->set_conflict_all_commits(true); 2202 mock_server_->set_conflict_all_commits(true);
2206 SyncShareNudge(); 2203 SyncShareNudge();
2207 syncable::Directory::ChildHandles children; 2204 syncable::Directory::ChildHandles children;
2208 { 2205 {
(...skipping 14 matching lines...) Expand all
2223 saw_syncer_event_ = false; 2220 saw_syncer_event_ = false;
2224 } 2221 }
2225 2222
2226 // We got this repro case when someone was editing bookmarks while sync was 2223 // We got this repro case when someone was editing bookmarks while sync was
2227 // occuring. The entry had changed out underneath the user. 2224 // occuring. The entry had changed out underneath the user.
2228 TEST_F(SyncerTest, CommitsUpdateDoesntAlterEntry) { 2225 TEST_F(SyncerTest, CommitsUpdateDoesntAlterEntry) {
2229 const base::Time& test_time = ProtoTimeToTime(123456); 2226 const base::Time& test_time = ProtoTimeToTime(123456);
2230 int64 entry_metahandle; 2227 int64 entry_metahandle;
2231 { 2228 {
2232 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 2229 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
2233 MutableEntry entry(&wtrans, CREATE, BOOKMARKS, root_id_, "Pete"); 2230 MutableEntry entry(&wtrans, syncable::CREATE, root_id_, "Pete");
2234 ASSERT_TRUE(entry.good()); 2231 ASSERT_TRUE(entry.good());
2235 EXPECT_FALSE(entry.Get(ID).ServerKnows()); 2232 EXPECT_FALSE(entry.Get(ID).ServerKnows());
2236 entry.Put(syncable::IS_DIR, true); 2233 entry.Put(syncable::IS_DIR, true);
2237 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 2234 entry.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
2238 entry.Put(syncable::IS_UNSYNCED, true); 2235 entry.Put(syncable::IS_UNSYNCED, true);
2239 entry.Put(syncable::MTIME, test_time); 2236 entry.Put(syncable::MTIME, test_time);
2240 entry_metahandle = entry.Get(META_HANDLE); 2237 entry_metahandle = entry.Get(META_HANDLE);
2241 } 2238 }
2242 SyncShareNudge(); 2239 SyncShareNudge();
2243 syncable::Id id; 2240 syncable::Id id;
(...skipping 25 matching lines...) Expand all
2269 } 2266 }
2270 } 2267 }
2271 2268
2272 TEST_F(SyncerTest, ParentAndChildBothMatch) { 2269 TEST_F(SyncerTest, ParentAndChildBothMatch) {
2273 const FullModelTypeSet all_types = FullModelTypeSet::All(); 2270 const FullModelTypeSet all_types = FullModelTypeSet::All();
2274 syncable::Id parent_id = ids_.NewServerId(); 2271 syncable::Id parent_id = ids_.NewServerId();
2275 syncable::Id child_id = ids_.NewServerId(); 2272 syncable::Id child_id = ids_.NewServerId();
2276 2273
2277 { 2274 {
2278 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 2275 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
2279 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "Folder"); 2276 MutableEntry parent(&wtrans, CREATE, root_id_, "Folder");
2280 ASSERT_TRUE(parent.good()); 2277 ASSERT_TRUE(parent.good());
2281 parent.Put(IS_DIR, true); 2278 parent.Put(IS_DIR, true);
2282 parent.Put(IS_UNSYNCED, true); 2279 parent.Put(IS_UNSYNCED, true);
2283 parent.Put(ID, parent_id); 2280 parent.Put(ID, parent_id);
2284 parent.Put(BASE_VERSION, 1); 2281 parent.Put(BASE_VERSION, 1);
2285 parent.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2282 parent.Put(SPECIFICS, DefaultBookmarkSpecifics());
2286 2283
2287 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "test.htm"); 2284 MutableEntry child(&wtrans, CREATE, parent.Get(ID), "test.htm");
2288 ASSERT_TRUE(child.good()); 2285 ASSERT_TRUE(child.good());
2289 child.Put(ID, child_id); 2286 child.Put(ID, child_id);
2290 child.Put(BASE_VERSION, 1); 2287 child.Put(BASE_VERSION, 1);
2291 child.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2288 child.Put(SPECIFICS, DefaultBookmarkSpecifics());
2292 WriteTestDataToEntry(&wtrans, &child); 2289 WriteTestDataToEntry(&wtrans, &child);
2293 } 2290 }
2294 mock_server_->AddUpdateDirectory(parent_id, root_id_, "Folder", 10, 10); 2291 mock_server_->AddUpdateDirectory(parent_id, root_id_, "Folder", 10, 10);
2295 mock_server_->AddUpdateBookmark(child_id, parent_id, "test.htm", 10, 10); 2292 mock_server_->AddUpdateBookmark(child_id, parent_id, "test.htm", 10, 10);
2296 mock_server_->set_conflict_all_commits(true); 2293 mock_server_->set_conflict_all_commits(true);
2297 SyncShareNudge(); 2294 SyncShareNudge();
(...skipping 12 matching lines...) Expand all
2310 syncable::Directory::UnsyncedMetaHandles unsynced; 2307 syncable::Directory::UnsyncedMetaHandles unsynced;
2311 directory()->GetUnsyncedMetaHandles(&trans, &unsynced); 2308 directory()->GetUnsyncedMetaHandles(&trans, &unsynced);
2312 EXPECT_EQ(0u, unsynced.size()); 2309 EXPECT_EQ(0u, unsynced.size());
2313 saw_syncer_event_ = false; 2310 saw_syncer_event_ = false;
2314 } 2311 }
2315 } 2312 }
2316 2313
2317 TEST_F(SyncerTest, CommittingNewDeleted) { 2314 TEST_F(SyncerTest, CommittingNewDeleted) {
2318 { 2315 {
2319 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2316 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2320 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); 2317 MutableEntry entry(&trans, CREATE, trans.root_id(), "bob");
2321 entry.Put(IS_UNSYNCED, true); 2318 entry.Put(IS_UNSYNCED, true);
2322 entry.Put(IS_DEL, true); 2319 entry.Put(IS_DEL, true);
2323 } 2320 }
2324 SyncShareNudge(); 2321 SyncShareNudge();
2325 EXPECT_EQ(0u, mock_server_->committed_ids().size()); 2322 EXPECT_EQ(0u, mock_server_->committed_ids().size());
2326 } 2323 }
2327 2324
2328 // Original problem synopsis: 2325 // Original problem synopsis:
2329 // Check failed: entry->Get(BASE_VERSION) <= entry->Get(SERVER_VERSION) 2326 // Check failed: entry->Get(BASE_VERSION) <= entry->Get(SERVER_VERSION)
2330 // Client creates entry, client finishes committing entry. Between 2327 // Client creates entry, client finishes committing entry. Between
2331 // commit and getting update back, we delete the entry. 2328 // commit and getting update back, we delete the entry.
2332 // We get the update for the entry, but the local one was modified 2329 // We get the update for the entry, but the local one was modified
2333 // so we store the entry but don't apply it. IS_UNAPPLIED_UPDATE is set. 2330 // so we store the entry but don't apply it. IS_UNAPPLIED_UPDATE is set.
2334 // We commit deletion and get a new version number. 2331 // We commit deletion and get a new version number.
2335 // We apply unapplied updates again before we get the update about the deletion. 2332 // We apply unapplied updates again before we get the update about the deletion.
2336 // This means we have an unapplied update where server_version < base_version. 2333 // This means we have an unapplied update where server_version < base_version.
2337 TEST_F(SyncerTest, UnappliedUpdateDuringCommit) { 2334 TEST_F(SyncerTest, UnappliedUpdateDuringCommit) {
2338 // This test is a little fake. 2335 // This test is a little fake.
2339 { 2336 {
2340 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2337 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2341 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); 2338 MutableEntry entry(&trans, CREATE, trans.root_id(), "bob");
2342 entry.Put(ID, ids_.FromNumber(20)); 2339 entry.Put(ID, ids_.FromNumber(20));
2343 entry.Put(BASE_VERSION, 1); 2340 entry.Put(BASE_VERSION, 1);
2344 entry.Put(SERVER_VERSION, 1); 2341 entry.Put(SERVER_VERSION, 1);
2345 entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999)); // Bad parent. 2342 entry.Put(SERVER_PARENT_ID, ids_.FromNumber(9999)); // Bad parent.
2346 entry.Put(IS_UNSYNCED, true); 2343 entry.Put(IS_UNSYNCED, true);
2347 entry.Put(IS_UNAPPLIED_UPDATE, true); 2344 entry.Put(IS_UNAPPLIED_UPDATE, true);
2348 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2345 entry.Put(SPECIFICS, DefaultBookmarkSpecifics());
2349 entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics()); 2346 entry.Put(SERVER_SPECIFICS, DefaultBookmarkSpecifics());
2350 entry.Put(IS_DEL, false); 2347 entry.Put(IS_DEL, false);
2351 } 2348 }
(...skipping 11 matching lines...) Expand all
2363 // make a new folder fred 2360 // make a new folder fred
2364 // move bob into fred 2361 // move bob into fred
2365 // remove bob 2362 // remove bob
2366 // remove fred 2363 // remove fred
2367 // if no syncing occured midway, bob will have an illegal parent 2364 // if no syncing occured midway, bob will have an illegal parent
2368 TEST_F(SyncerTest, DeletingEntryInFolder) { 2365 TEST_F(SyncerTest, DeletingEntryInFolder) {
2369 // This test is a little fake. 2366 // This test is a little fake.
2370 int64 existing_metahandle; 2367 int64 existing_metahandle;
2371 { 2368 {
2372 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2369 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2373 MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); 2370 MutableEntry entry(&trans, CREATE, trans.root_id(), "existing");
2374 ASSERT_TRUE(entry.good()); 2371 ASSERT_TRUE(entry.good());
2375 entry.Put(IS_DIR, true); 2372 entry.Put(IS_DIR, true);
2376 entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2373 entry.Put(SPECIFICS, DefaultBookmarkSpecifics());
2377 entry.Put(IS_UNSYNCED, true); 2374 entry.Put(IS_UNSYNCED, true);
2378 existing_metahandle = entry.Get(META_HANDLE); 2375 existing_metahandle = entry.Get(META_HANDLE);
2379 } 2376 }
2380 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); 2377 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END);
2381 { 2378 {
2382 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2379 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2383 MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); 2380 MutableEntry newfolder(&trans, CREATE, trans.root_id(), "new");
2384 ASSERT_TRUE(newfolder.good()); 2381 ASSERT_TRUE(newfolder.good());
2385 newfolder.Put(IS_DIR, true); 2382 newfolder.Put(IS_DIR, true);
2386 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2383 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics());
2387 newfolder.Put(IS_UNSYNCED, true); 2384 newfolder.Put(IS_UNSYNCED, true);
2388 2385
2389 MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle); 2386 MutableEntry existing(&trans, GET_BY_HANDLE, existing_metahandle);
2390 ASSERT_TRUE(existing.good()); 2387 ASSERT_TRUE(existing.good());
2391 existing.Put(PARENT_ID, newfolder.Get(ID)); 2388 existing.Put(PARENT_ID, newfolder.Get(ID));
2392 existing.Put(IS_UNSYNCED, true); 2389 existing.Put(IS_UNSYNCED, true);
2393 EXPECT_TRUE(existing.Get(ID).ServerKnows()); 2390 EXPECT_TRUE(existing.Get(ID).ServerKnows());
2394 2391
2395 newfolder.Put(IS_DEL, true); 2392 newfolder.Put(IS_DEL, true);
2396 existing.Put(IS_DEL, true); 2393 existing.Put(IS_DEL, true);
2397 } 2394 }
2398 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); 2395 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END);
2399 EXPECT_EQ(0, status().num_server_conflicts()); 2396 EXPECT_EQ(0, status().num_server_conflicts());
2400 } 2397 }
2401 2398
2402 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { 2399 TEST_F(SyncerTest, DeletingEntryWithLocalEdits) {
2403 int64 newfolder_metahandle; 2400 int64 newfolder_metahandle;
2404 2401
2405 mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10); 2402 mock_server_->AddUpdateDirectory(1, 0, "bob", 1, 10);
2406 SyncShareNudge(); 2403 SyncShareNudge();
2407 { 2404 {
2408 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2405 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2409 MutableEntry newfolder( 2406 MutableEntry newfolder(&trans, CREATE, ids_.FromNumber(1), "local");
2410 &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local");
2411 ASSERT_TRUE(newfolder.good()); 2407 ASSERT_TRUE(newfolder.good());
2412 newfolder.Put(IS_UNSYNCED, true); 2408 newfolder.Put(IS_UNSYNCED, true);
2413 newfolder.Put(IS_DIR, true); 2409 newfolder.Put(IS_DIR, true);
2414 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2410 newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics());
2415 newfolder_metahandle = newfolder.Get(META_HANDLE); 2411 newfolder_metahandle = newfolder.Get(META_HANDLE);
2416 } 2412 }
2417 mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20); 2413 mock_server_->AddUpdateDirectory(1, 0, "bob", 2, 20);
2418 mock_server_->SetLastUpdateDeleted(); 2414 mock_server_->SetLastUpdateDeleted();
2419 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, APPLY_UPDATES); 2415 syncer_->SyncShare(session_.get(), SYNCER_BEGIN, APPLY_UPDATES);
2420 { 2416 {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2491 // we post more than one commit command to the server. This test makes 2487 // we post more than one commit command to the server. This test makes
2492 // sure that scenario works as expected. 2488 // sure that scenario works as expected.
2493 TEST_F(SyncerTest, CommitManyItemsInOneGo_Success) { 2489 TEST_F(SyncerTest, CommitManyItemsInOneGo_Success) {
2494 uint32 num_batches = 3; 2490 uint32 num_batches = 3;
2495 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches; 2491 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches;
2496 { 2492 {
2497 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2493 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2498 for (uint32 i = 0; i < items_to_commit; i++) { 2494 for (uint32 i = 0; i < items_to_commit; i++) {
2499 string nameutf8 = base::StringPrintf("%d", i); 2495 string nameutf8 = base::StringPrintf("%d", i);
2500 string name(nameutf8.begin(), nameutf8.end()); 2496 string name(nameutf8.begin(), nameutf8.end());
2501 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); 2497 MutableEntry e(&trans, CREATE, trans.root_id(), name);
2502 e.Put(IS_UNSYNCED, true); 2498 e.Put(IS_UNSYNCED, true);
2503 e.Put(IS_DIR, true); 2499 e.Put(IS_DIR, true);
2504 e.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2500 e.Put(SPECIFICS, DefaultBookmarkSpecifics());
2505 } 2501 }
2506 } 2502 }
2507 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count()); 2503 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count());
2508 2504
2509 SyncShareNudge(); 2505 SyncShareNudge();
2510 EXPECT_EQ(num_batches, mock_server_->commit_messages().size()); 2506 EXPECT_EQ(num_batches, mock_server_->commit_messages().size());
2511 EXPECT_EQ(0, directory()->unsynced_entity_count()); 2507 EXPECT_EQ(0, directory()->unsynced_entity_count());
2512 } 2508 }
2513 2509
2514 // Test that a single failure to contact the server will cause us to exit the 2510 // Test that a single failure to contact the server will cause us to exit the
2515 // commit loop immediately. 2511 // commit loop immediately.
2516 TEST_F(SyncerTest, CommitManyItemsInOneGo_PostBufferFail) { 2512 TEST_F(SyncerTest, CommitManyItemsInOneGo_PostBufferFail) {
2517 uint32 num_batches = 3; 2513 uint32 num_batches = 3;
2518 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches; 2514 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches;
2519 { 2515 {
2520 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2516 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2521 for (uint32 i = 0; i < items_to_commit; i++) { 2517 for (uint32 i = 0; i < items_to_commit; i++) {
2522 string nameutf8 = base::StringPrintf("%d", i); 2518 string nameutf8 = base::StringPrintf("%d", i);
2523 string name(nameutf8.begin(), nameutf8.end()); 2519 string name(nameutf8.begin(), nameutf8.end());
2524 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); 2520 MutableEntry e(&trans, CREATE, trans.root_id(), name);
2525 e.Put(IS_UNSYNCED, true); 2521 e.Put(IS_UNSYNCED, true);
2526 e.Put(IS_DIR, true); 2522 e.Put(IS_DIR, true);
2527 e.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2523 e.Put(SPECIFICS, DefaultBookmarkSpecifics());
2528 } 2524 }
2529 } 2525 }
2530 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count()); 2526 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count());
2531 2527
2532 // The second commit should fail. It will be preceded by one successful 2528 // The second commit should fail. It will be preceded by one successful
2533 // GetUpdate and one succesful commit. 2529 // GetUpdate and one succesful commit.
2534 mock_server_->FailNthPostBufferToPathCall(3); 2530 mock_server_->FailNthPostBufferToPathCall(3);
2535 SyncShareNudge(); 2531 SyncShareNudge();
2536 2532
2537 EXPECT_EQ(1U, mock_server_->commit_messages().size()); 2533 EXPECT_EQ(1U, mock_server_->commit_messages().size());
2538 EXPECT_EQ(SYNC_SERVER_ERROR, 2534 EXPECT_EQ(SYNC_SERVER_ERROR,
2539 session_->status_controller().model_neutral_state().commit_result); 2535 session_->status_controller().model_neutral_state().commit_result);
2540 EXPECT_EQ(items_to_commit - kDefaultMaxCommitBatchSize, 2536 EXPECT_EQ(items_to_commit - kDefaultMaxCommitBatchSize,
2541 directory()->unsynced_entity_count()); 2537 directory()->unsynced_entity_count());
2542 } 2538 }
2543 2539
2544 // Test that a single conflict response from the server will cause us to exit 2540 // Test that a single conflict response from the server will cause us to exit
2545 // the commit loop immediately. 2541 // the commit loop immediately.
2546 TEST_F(SyncerTest, CommitManyItemsInOneGo_CommitConflict) { 2542 TEST_F(SyncerTest, CommitManyItemsInOneGo_CommitConflict) {
2547 uint32 num_batches = 2; 2543 uint32 num_batches = 2;
2548 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches; 2544 uint32 items_to_commit = kDefaultMaxCommitBatchSize * num_batches;
2549 { 2545 {
2550 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2546 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2551 for (uint32 i = 0; i < items_to_commit; i++) { 2547 for (uint32 i = 0; i < items_to_commit; i++) {
2552 string nameutf8 = base::StringPrintf("%d", i); 2548 string nameutf8 = base::StringPrintf("%d", i);
2553 string name(nameutf8.begin(), nameutf8.end()); 2549 string name(nameutf8.begin(), nameutf8.end());
2554 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); 2550 MutableEntry e(&trans, CREATE, trans.root_id(), name);
2555 e.Put(IS_UNSYNCED, true); 2551 e.Put(IS_UNSYNCED, true);
2556 e.Put(IS_DIR, true); 2552 e.Put(IS_DIR, true);
2557 e.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2553 e.Put(SPECIFICS, DefaultBookmarkSpecifics());
2558 } 2554 }
2559 } 2555 }
2560 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count()); 2556 ASSERT_EQ(items_to_commit, directory()->unsynced_entity_count());
2561 2557
2562 // Return a CONFLICT response for the first item. 2558 // Return a CONFLICT response for the first item.
2563 mock_server_->set_conflict_n_commits(1); 2559 mock_server_->set_conflict_n_commits(1);
2564 SyncShareNudge(); 2560 SyncShareNudge();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2642 saw_syncer_event_ = false; 2638 saw_syncer_event_ = false;
2643 } 2639 }
2644 2640
2645 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath) { 2641 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath) {
2646 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10); 2642 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10);
2647 SyncShareNudge(); 2643 SyncShareNudge();
2648 int64 local_folder_handle; 2644 int64 local_folder_handle;
2649 syncable::Id local_folder_id; 2645 syncable::Id local_folder_id;
2650 { 2646 {
2651 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 2647 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
2652 MutableEntry new_entry( 2648 MutableEntry new_entry(&wtrans, CREATE, wtrans.root_id(), "Bar.htm");
2653 &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bar.htm");
2654 ASSERT_TRUE(new_entry.good()); 2649 ASSERT_TRUE(new_entry.good());
2655 local_folder_id = new_entry.Get(ID); 2650 local_folder_id = new_entry.Get(ID);
2656 local_folder_handle = new_entry.Get(META_HANDLE); 2651 local_folder_handle = new_entry.Get(META_HANDLE);
2657 new_entry.Put(IS_UNSYNCED, true); 2652 new_entry.Put(IS_UNSYNCED, true);
2658 new_entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2653 new_entry.Put(SPECIFICS, DefaultBookmarkSpecifics());
2659 MutableEntry old(&wtrans, GET_BY_ID, ids_.FromNumber(1)); 2654 MutableEntry old(&wtrans, GET_BY_ID, ids_.FromNumber(1));
2660 ASSERT_TRUE(old.good()); 2655 ASSERT_TRUE(old.good());
2661 WriteTestDataToEntry(&wtrans, &old); 2656 WriteTestDataToEntry(&wtrans, &old);
2662 } 2657 }
2663 mock_server_->AddUpdateBookmark(1, 0, "Bar.htm", 20, 20); 2658 mock_server_->AddUpdateBookmark(1, 0, "Bar.htm", 20, 20);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2709 2704
2710 // Same as NewEntryAnddServerEntrySharePath, but using the old-style protocol. 2705 // Same as NewEntryAnddServerEntrySharePath, but using the old-style protocol.
2711 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath_OldBookmarksProto) { 2706 TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath_OldBookmarksProto) {
2712 mock_server_->set_use_legacy_bookmarks_protocol(true); 2707 mock_server_->set_use_legacy_bookmarks_protocol(true);
2713 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10); 2708 mock_server_->AddUpdateBookmark(1, 0, "Foo.htm", 10, 10);
2714 SyncShareNudge(); 2709 SyncShareNudge();
2715 int64 local_folder_handle; 2710 int64 local_folder_handle;
2716 syncable::Id local_folder_id; 2711 syncable::Id local_folder_id;
2717 { 2712 {
2718 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 2713 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
2719 MutableEntry new_entry( 2714 MutableEntry new_entry(&wtrans, CREATE, wtrans.root_id(), "Bar.htm");
2720 &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bar.htm");
2721 ASSERT_TRUE(new_entry.good()); 2715 ASSERT_TRUE(new_entry.good());
2722 local_folder_id = new_entry.Get(ID); 2716 local_folder_id = new_entry.Get(ID);
2723 local_folder_handle = new_entry.Get(META_HANDLE); 2717 local_folder_handle = new_entry.Get(META_HANDLE);
2724 new_entry.Put(IS_UNSYNCED, true); 2718 new_entry.Put(IS_UNSYNCED, true);
2725 new_entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2719 new_entry.Put(SPECIFICS, DefaultBookmarkSpecifics());
2726 MutableEntry old(&wtrans, GET_BY_ID, ids_.FromNumber(1)); 2720 MutableEntry old(&wtrans, GET_BY_ID, ids_.FromNumber(1));
2727 ASSERT_TRUE(old.good()); 2721 ASSERT_TRUE(old.good());
2728 WriteTestDataToEntry(&wtrans, &old); 2722 WriteTestDataToEntry(&wtrans, &old);
2729 } 2723 }
2730 mock_server_->AddUpdateBookmark(1, 0, "Bar.htm", 20, 20); 2724 mock_server_->AddUpdateBookmark(1, 0, "Bar.htm", 20, 20);
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
2882 EXPECT_EQ(2, bob.Get(BASE_VERSION)); 2876 EXPECT_EQ(2, bob.Get(BASE_VERSION));
2883 } 2877 }
2884 saw_syncer_event_ = false; 2878 saw_syncer_event_ = false;
2885 } 2879 }
2886 2880
2887 // This test is to reproduce a check failure. Sometimes we would get a bad ID 2881 // This test is to reproduce a check failure. Sometimes we would get a bad ID
2888 // back when creating an entry. 2882 // back when creating an entry.
2889 TEST_F(SyncerTest, DuplicateIDReturn) { 2883 TEST_F(SyncerTest, DuplicateIDReturn) {
2890 { 2884 {
2891 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2885 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2892 MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); 2886 MutableEntry folder(&trans, CREATE, trans.root_id(), "bob");
2893 ASSERT_TRUE(folder.good()); 2887 ASSERT_TRUE(folder.good());
2894 folder.Put(IS_UNSYNCED, true); 2888 folder.Put(IS_UNSYNCED, true);
2895 folder.Put(IS_DIR, true); 2889 folder.Put(IS_DIR, true);
2896 folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2890 folder.Put(SPECIFICS, DefaultBookmarkSpecifics());
2897 MutableEntry folder2(&trans, CREATE, BOOKMARKS, trans.root_id(), "fred"); 2891 MutableEntry folder2(&trans, CREATE, trans.root_id(), "fred");
2898 ASSERT_TRUE(folder2.good()); 2892 ASSERT_TRUE(folder2.good());
2899 folder2.Put(IS_UNSYNCED, false); 2893 folder2.Put(IS_UNSYNCED, false);
2900 folder2.Put(IS_DIR, true); 2894 folder2.Put(IS_DIR, true);
2901 folder2.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2895 folder2.Put(SPECIFICS, DefaultBookmarkSpecifics());
2902 folder2.Put(BASE_VERSION, 3); 2896 folder2.Put(BASE_VERSION, 3);
2903 folder2.Put(ID, syncable::Id::CreateFromServerId("mock_server:10000")); 2897 folder2.Put(ID, syncable::Id::CreateFromServerId("mock_server:10000"));
2904 } 2898 }
2905 mock_server_->set_next_new_id(10000); 2899 mock_server_->set_next_new_id(10000);
2906 EXPECT_EQ(1u, directory()->unsynced_entity_count()); 2900 EXPECT_EQ(1u, directory()->unsynced_entity_count());
2907 // we get back a bad id in here (should never happen). 2901 // we get back a bad id in here (should never happen).
(...skipping 18 matching lines...) Expand all
2926 } 2920 }
2927 mock_server_->AddUpdateDirectory(2, 1, "fred", 1, 10); 2921 mock_server_->AddUpdateDirectory(2, 1, "fred", 1, 10);
2928 SyncShareNudge(); 2922 SyncShareNudge();
2929 SyncShareNudge(); 2923 SyncShareNudge();
2930 } 2924 }
2931 2925
2932 TEST_F(SyncerTest, ConflictResolverMergesLocalDeleteAndServerUpdate) { 2926 TEST_F(SyncerTest, ConflictResolverMergesLocalDeleteAndServerUpdate) {
2933 { 2927 {
2934 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2928 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2935 2929
2936 MutableEntry local_deleted( 2930 MutableEntry local_deleted(&trans, CREATE, trans.root_id(), "name");
2937 &trans, CREATE, BOOKMARKS, trans.root_id(), "name");
2938 local_deleted.Put(ID, ids_.FromNumber(1)); 2931 local_deleted.Put(ID, ids_.FromNumber(1));
2939 local_deleted.Put(BASE_VERSION, 1); 2932 local_deleted.Put(BASE_VERSION, 1);
2940 local_deleted.Put(IS_DEL, true); 2933 local_deleted.Put(IS_DEL, true);
2941 local_deleted.Put(IS_DIR, false); 2934 local_deleted.Put(IS_DIR, false);
2942 local_deleted.Put(IS_UNSYNCED, true); 2935 local_deleted.Put(IS_UNSYNCED, true);
2943 local_deleted.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2936 local_deleted.Put(SPECIFICS, DefaultBookmarkSpecifics());
2944 } 2937 }
2945 2938
2946 mock_server_->AddUpdateBookmark(ids_.FromNumber(1), root_id_, "name", 10, 10); 2939 mock_server_->AddUpdateBookmark(ids_.FromNumber(1), root_id_, "name", 10, 10);
2947 2940
(...skipping 12 matching lines...) Expand all
2960 } 2953 }
2961 } 2954 }
2962 2955
2963 // See what happens if the IS_DIR bit gets flipped. This can cause us 2956 // See what happens if the IS_DIR bit gets flipped. This can cause us
2964 // all kinds of disasters. 2957 // all kinds of disasters.
2965 TEST_F(SyncerTest, UpdateFlipsTheFolderBit) { 2958 TEST_F(SyncerTest, UpdateFlipsTheFolderBit) {
2966 // Local object: a deleted directory (container), revision 1, unsynced. 2959 // Local object: a deleted directory (container), revision 1, unsynced.
2967 { 2960 {
2968 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 2961 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
2969 2962
2970 MutableEntry local_deleted( 2963 MutableEntry local_deleted(&trans, CREATE, trans.root_id(), "name");
2971 &trans, CREATE, BOOKMARKS, trans.root_id(), "name");
2972 local_deleted.Put(ID, ids_.FromNumber(1)); 2964 local_deleted.Put(ID, ids_.FromNumber(1));
2973 local_deleted.Put(BASE_VERSION, 1); 2965 local_deleted.Put(BASE_VERSION, 1);
2974 local_deleted.Put(IS_DEL, true); 2966 local_deleted.Put(IS_DEL, true);
2975 local_deleted.Put(IS_DIR, true); 2967 local_deleted.Put(IS_DIR, true);
2976 local_deleted.Put(IS_UNSYNCED, true); 2968 local_deleted.Put(IS_UNSYNCED, true);
2977 local_deleted.Put(SPECIFICS, DefaultBookmarkSpecifics()); 2969 local_deleted.Put(SPECIFICS, DefaultBookmarkSpecifics());
2978 } 2970 }
2979 2971
2980 // Server update: entry-type object (not a container), revision 10. 2972 // Server update: entry-type object (not a container), revision 10.
2981 mock_server_->AddUpdateBookmark(ids_.FromNumber(1), root_id_, "name", 10, 10); 2973 mock_server_->AddUpdateBookmark(ids_.FromNumber(1), root_id_, "name", 10, 10);
(...skipping 17 matching lines...) Expand all
2999 2991
3000 // Bug Synopsis: 2992 // Bug Synopsis:
3001 // Merge conflict resolution will merge a new local entry with another entry 2993 // Merge conflict resolution will merge a new local entry with another entry
3002 // that needs updates, resulting in CHECK. 2994 // that needs updates, resulting in CHECK.
3003 TEST_F(SyncerTest, MergingExistingItems) { 2995 TEST_F(SyncerTest, MergingExistingItems) {
3004 mock_server_->set_conflict_all_commits(true); 2996 mock_server_->set_conflict_all_commits(true);
3005 mock_server_->AddUpdateBookmark(1, 0, "base", 10, 10); 2997 mock_server_->AddUpdateBookmark(1, 0, "base", 10, 10);
3006 SyncShareNudge(); 2998 SyncShareNudge();
3007 { 2999 {
3008 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 3000 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
3009 MutableEntry entry( 3001 MutableEntry entry(&trans, CREATE, trans.root_id(), "Copy of base");
3010 &trans, CREATE, BOOKMARKS, trans.root_id(), "Copy of base");
3011 WriteTestDataToEntry(&trans, &entry); 3002 WriteTestDataToEntry(&trans, &entry);
3012 } 3003 }
3013 mock_server_->AddUpdateBookmark(1, 0, "Copy of base", 50, 50); 3004 mock_server_->AddUpdateBookmark(1, 0, "Copy of base", 50, 50);
3014 SyncRepeatedlyToTriggerConflictResolution(session_.get()); 3005 SyncRepeatedlyToTriggerConflictResolution(session_.get());
3015 } 3006 }
3016 3007
3017 // In this test a long changelog contains a child at the start of the changelog 3008 // In this test a long changelog contains a child at the start of the changelog
3018 // and a parent at the end. While these updates are in progress the client would 3009 // and a parent at the end. While these updates are in progress the client would
3019 // appear stuck. 3010 // appear stuck.
3020 TEST_F(SyncerTest, LongChangelistWithApplicationConflict) { 3011 TEST_F(SyncerTest, LongChangelistWithApplicationConflict) {
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
3190 } 3181 }
3191 } 3182 }
3192 3183
3193 TEST_F(SyncerTest, DirectoryCommitTest) { 3184 TEST_F(SyncerTest, DirectoryCommitTest) {
3194 syncable::Id in_root_id, in_dir_id; 3185 syncable::Id in_root_id, in_dir_id;
3195 int64 foo_metahandle; 3186 int64 foo_metahandle;
3196 int64 bar_metahandle; 3187 int64 bar_metahandle;
3197 3188
3198 { 3189 {
3199 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 3190 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
3200 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "foo"); 3191 MutableEntry parent(&wtrans, syncable::CREATE, root_id_, "foo");
3201 ASSERT_TRUE(parent.good()); 3192 ASSERT_TRUE(parent.good());
3202 parent.Put(syncable::IS_UNSYNCED, true); 3193 parent.Put(syncable::IS_UNSYNCED, true);
3203 parent.Put(syncable::IS_DIR, true); 3194 parent.Put(syncable::IS_DIR, true);
3204 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 3195 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
3205 in_root_id = parent.Get(syncable::ID); 3196 in_root_id = parent.Get(syncable::ID);
3206 foo_metahandle = parent.Get(META_HANDLE); 3197 foo_metahandle = parent.Get(META_HANDLE);
3207 3198
3208 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "bar"); 3199 MutableEntry child(&wtrans, syncable::CREATE, parent.Get(ID), "bar");
3209 ASSERT_TRUE(child.good()); 3200 ASSERT_TRUE(child.good());
3210 child.Put(syncable::IS_UNSYNCED, true); 3201 child.Put(syncable::IS_UNSYNCED, true);
3211 child.Put(syncable::IS_DIR, true); 3202 child.Put(syncable::IS_DIR, true);
3212 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 3203 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
3213 bar_metahandle = child.Get(META_HANDLE); 3204 bar_metahandle = child.Get(META_HANDLE);
3214 in_dir_id = parent.Get(syncable::ID); 3205 in_dir_id = parent.Get(syncable::ID);
3215 } 3206 }
3216 SyncShareNudge(); 3207 SyncShareNudge();
3217 { 3208 {
3218 syncable::ReadTransaction trans(FROM_HERE, directory()); 3209 syncable::ReadTransaction trans(FROM_HERE, directory());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
3310 "folder_two", 1, 1); 3301 "folder_two", 1, 1);
3311 SyncShareNudge(); 3302 SyncShareNudge();
3312 { 3303 {
3313 // A moved entry should send an "old parent." 3304 // A moved entry should send an "old parent."
3314 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 3305 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
3315 MutableEntry entry(&trans, GET_BY_ID, folder_one_id); 3306 MutableEntry entry(&trans, GET_BY_ID, folder_one_id);
3316 ASSERT_TRUE(entry.good()); 3307 ASSERT_TRUE(entry.good());
3317 entry.Put(PARENT_ID, folder_two_id); 3308 entry.Put(PARENT_ID, folder_two_id);
3318 entry.Put(IS_UNSYNCED, true); 3309 entry.Put(IS_UNSYNCED, true);
3319 // A new entry should send no "old parent." 3310 // A new entry should send no "old parent."
3320 MutableEntry create( 3311 MutableEntry create(&trans, CREATE, trans.root_id(), "new_folder");
3321 &trans, CREATE, BOOKMARKS, trans.root_id(), "new_folder");
3322 create.Put(IS_UNSYNCED, true); 3312 create.Put(IS_UNSYNCED, true);
3323 create.Put(SPECIFICS, DefaultBookmarkSpecifics()); 3313 create.Put(SPECIFICS, DefaultBookmarkSpecifics());
3324 } 3314 }
3325 SyncShareNudge(); 3315 SyncShareNudge();
3326 const sync_pb::CommitMessage& commit = mock_server_->last_sent_commit(); 3316 const sync_pb::CommitMessage& commit = mock_server_->last_sent_commit();
3327 ASSERT_EQ(2, commit.entries_size()); 3317 ASSERT_EQ(2, commit.entries_size());
3328 EXPECT_TRUE(commit.entries(0).parent_id_string() == "2"); 3318 EXPECT_TRUE(commit.entries(0).parent_id_string() == "2");
3329 EXPECT_TRUE(commit.entries(0).old_parent_id() == "0"); 3319 EXPECT_TRUE(commit.entries(0).old_parent_id() == "0");
3330 EXPECT_FALSE(commit.entries(1).has_old_parent_id()); 3320 EXPECT_FALSE(commit.entries(1).has_old_parent_id());
3331 } 3321 }
3332 3322
3333 TEST_F(SyncerTest, Test64BitVersionSupport) { 3323 TEST_F(SyncerTest, Test64BitVersionSupport) {
3334 int64 really_big_int = std::numeric_limits<int64>::max() - 12; 3324 int64 really_big_int = std::numeric_limits<int64>::max() - 12;
3335 const string name("ringo's dang orang ran rings around my o-ring"); 3325 const string name("ringo's dang orang ran rings around my o-ring");
3336 int64 item_metahandle; 3326 int64 item_metahandle;
3337 3327
3338 // Try writing max int64 to the version fields of a meta entry. 3328 // Try writing max int64 to the version fields of a meta entry.
3339 { 3329 {
3340 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); 3330 WriteTransaction wtrans(FROM_HERE, UNITTEST, directory());
3341 MutableEntry entry(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); 3331 MutableEntry entry(&wtrans, syncable::CREATE, wtrans.root_id(), name);
3342 ASSERT_TRUE(entry.good()); 3332 ASSERT_TRUE(entry.good());
3343 entry.Put(syncable::BASE_VERSION, really_big_int); 3333 entry.Put(syncable::BASE_VERSION, really_big_int);
3344 entry.Put(syncable::SERVER_VERSION, really_big_int); 3334 entry.Put(syncable::SERVER_VERSION, really_big_int);
3345 entry.Put(syncable::ID, ids_.NewServerId()); 3335 entry.Put(syncable::ID, ids_.NewServerId());
3346 item_metahandle = entry.Get(META_HANDLE); 3336 item_metahandle = entry.Get(META_HANDLE);
3347 } 3337 }
3348 // Now read it back out and make sure the value is max int64. 3338 // Now read it back out and make sure the value is max int64.
3349 syncable::ReadTransaction rtrans(FROM_HERE, directory()); 3339 syncable::ReadTransaction rtrans(FROM_HERE, directory());
3350 Entry entry(&rtrans, syncable::GET_BY_HANDLE, item_metahandle); 3340 Entry entry(&rtrans, syncable::GET_BY_HANDLE, item_metahandle);
3351 ASSERT_TRUE(entry.good()); 3341 ASSERT_TRUE(entry.good());
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
3542 TEST_F(SyncerTest, ClientTagUncommittedTagMatchesUpdate) { 3532 TEST_F(SyncerTest, ClientTagUncommittedTagMatchesUpdate) {
3543 int64 original_metahandle = 0; 3533 int64 original_metahandle = 0;
3544 3534
3545 sync_pb::EntitySpecifics local_bookmark(DefaultBookmarkSpecifics()); 3535 sync_pb::EntitySpecifics local_bookmark(DefaultBookmarkSpecifics());
3546 local_bookmark.mutable_bookmark()->set_url("http://foo/localsite"); 3536 local_bookmark.mutable_bookmark()->set_url("http://foo/localsite");
3547 sync_pb::EntitySpecifics server_bookmark(DefaultBookmarkSpecifics()); 3537 sync_pb::EntitySpecifics server_bookmark(DefaultBookmarkSpecifics());
3548 server_bookmark.mutable_bookmark()->set_url("http://bar/serversite"); 3538 server_bookmark.mutable_bookmark()->set_url("http://bar/serversite");
3549 3539
3550 { 3540 {
3551 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 3541 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
3552 MutableEntry perm_folder( 3542 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname");
3553 &trans, CREATE, BOOKMARKS, ids_.root(), "clientname");
3554 ASSERT_TRUE(perm_folder.good()); 3543 ASSERT_TRUE(perm_folder.good());
3555 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); 3544 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm");
3556 perm_folder.Put(SPECIFICS, local_bookmark); 3545 perm_folder.Put(SPECIFICS, local_bookmark);
3557 perm_folder.Put(IS_UNSYNCED, true); 3546 perm_folder.Put(IS_UNSYNCED, true);
3558 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); 3547 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE));
3559 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows()); 3548 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows());
3560 original_metahandle = perm_folder.Get(META_HANDLE); 3549 original_metahandle = perm_folder.Get(META_HANDLE);
3561 } 3550 }
3562 3551
3563 mock_server_->AddUpdateBookmark(1, 0, "permitem_renamed", 10, 100); 3552 mock_server_->AddUpdateBookmark(1, 0, "permitem_renamed", 10, 100);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3608 EXPECT_EQ(local_bookmark.SerializeAsString(), 3597 EXPECT_EQ(local_bookmark.SerializeAsString(),
3609 perm_folder.Get(SPECIFICS).SerializeAsString()); 3598 perm_folder.Get(SPECIFICS).SerializeAsString());
3610 EXPECT_TRUE(perm_folder.Get(ID).ServerKnows()); 3599 EXPECT_TRUE(perm_folder.Get(ID).ServerKnows());
3611 } 3600 }
3612 } 3601 }
3613 3602
3614 TEST_F(SyncerTest, ClientTagConflictWithDeletedLocalEntry) { 3603 TEST_F(SyncerTest, ClientTagConflictWithDeletedLocalEntry) {
3615 { 3604 {
3616 // Create a deleted local entry with a unique client tag. 3605 // Create a deleted local entry with a unique client tag.
3617 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 3606 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
3618 MutableEntry perm_folder( 3607 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname");
3619 &trans, CREATE, BOOKMARKS, ids_.root(), "clientname");
3620 ASSERT_TRUE(perm_folder.good()); 3608 ASSERT_TRUE(perm_folder.good());
3621 ASSERT_FALSE(perm_folder.Get(ID).ServerKnows()); 3609 ASSERT_FALSE(perm_folder.Get(ID).ServerKnows());
3622 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); 3610 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm");
3623 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); 3611 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics());
3624 perm_folder.Put(IS_UNSYNCED, true); 3612 perm_folder.Put(IS_UNSYNCED, true);
3625 3613
3626 // Note: IS_DEL && !ServerKnows() will clear the UNSYNCED bit. 3614 // Note: IS_DEL && !ServerKnows() will clear the UNSYNCED bit.
3627 // (We never attempt to commit server-unknown deleted items, so this 3615 // (We never attempt to commit server-unknown deleted items, so this
3628 // helps us clean up those entries). 3616 // helps us clean up those entries).
3629 perm_folder.Put(IS_DEL, true); 3617 perm_folder.Put(IS_DEL, true);
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
4071 // - commitresponse - getupdates. 4059 // - commitresponse - getupdates.
4072 class SyncerUndeletionTest : public SyncerTest { 4060 class SyncerUndeletionTest : public SyncerTest {
4073 public: 4061 public:
4074 SyncerUndeletionTest() 4062 SyncerUndeletionTest()
4075 : client_tag_("foobar"), 4063 : client_tag_("foobar"),
4076 metahandle_(syncable::kInvalidMetaHandle) { 4064 metahandle_(syncable::kInvalidMetaHandle) {
4077 } 4065 }
4078 4066
4079 void Create() { 4067 void Create() {
4080 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 4068 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
4081 MutableEntry perm_folder( 4069 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname");
4082 &trans, CREATE, BOOKMARKS, ids_.root(), "clientname");
4083 ASSERT_TRUE(perm_folder.good()); 4070 ASSERT_TRUE(perm_folder.good());
4084 perm_folder.Put(UNIQUE_CLIENT_TAG, client_tag_); 4071 perm_folder.Put(UNIQUE_CLIENT_TAG, client_tag_);
4085 perm_folder.Put(IS_UNSYNCED, true); 4072 perm_folder.Put(IS_UNSYNCED, true);
4086 perm_folder.Put(SYNCING, false); 4073 perm_folder.Put(SYNCING, false);
4087 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); 4074 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics());
4088 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); 4075 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE));
4089 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows()); 4076 EXPECT_FALSE(perm_folder.Get(ID).ServerKnows());
4090 metahandle_ = perm_folder.Get(META_HANDLE); 4077 metahandle_ = perm_folder.Get(META_HANDLE);
4091 } 4078 }
4092 4079
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after
4710 4697
4711 TEST_F(SyncerPositionTiebreakingTest, MidLowHigh) { 4698 TEST_F(SyncerPositionTiebreakingTest, MidLowHigh) {
4712 Add(mid_id_); 4699 Add(mid_id_);
4713 Add(low_id_); 4700 Add(low_id_);
4714 Add(high_id_); 4701 Add(high_id_);
4715 SyncShareNudge(); 4702 SyncShareNudge();
4716 ExpectLocalOrderIsByServerId(); 4703 ExpectLocalOrderIsByServerId();
4717 } 4704 }
4718 4705
4719 } // namespace syncer 4706 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/process_commit_response_command_unittest.cc ('k') | sync/internal_api/public/test/test_entry_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698