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

Side by Side Diff: sync/syncable/directory_unittest.cc

Issue 1545553003: Switch to standard integer types in sync/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « sync/syncable/directory_unittest.h ('k') | sync/syncable/entry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 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 #include "sync/syncable/directory_unittest.h" 5 #include "sync/syncable/directory_unittest.h"
6 6
7 #include <stddef.h>
8 #include <stdint.h>
9
7 #include <cstdlib> 10 #include <cstdlib>
8 11
12 #include "base/macros.h"
9 #include "base/rand_util.h" 13 #include "base/rand_util.h"
10 #include "base/run_loop.h" 14 #include "base/run_loop.h"
11 #include "base/strings/stringprintf.h" 15 #include "base/strings/stringprintf.h"
12 #include "base/test/values_test_util.h" 16 #include "base/test/values_test_util.h"
13 #include "sync/internal_api/public/base/attachment_id_proto.h" 17 #include "sync/internal_api/public/base/attachment_id_proto.h"
14 #include "sync/syncable/syncable_proto_util.h" 18 #include "sync/syncable/syncable_proto_util.h"
15 #include "sync/syncable/syncable_util.h" 19 #include "sync/syncable/syncable_util.h"
16 #include "sync/syncable/syncable_write_transaction.h" 20 #include "sync/syncable/syncable_write_transaction.h"
17 #include "sync/test/engine/test_syncable_utils.h" 21 #include "sync/test/engine/test_syncable_utils.h"
18 #include "sync/test/test_directory_backing_store.h" 22 #include "sync/test/test_directory_backing_store.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 185
182 ReadTransaction trans(FROM_HERE, dir_.get()); 186 ReadTransaction trans(FROM_HERE, dir_.get());
183 sync_pb::DataTypeContext context; 187 sync_pb::DataTypeContext context;
184 dir_->GetDataTypeContext(&trans, it.Get(), &context); 188 dir_->GetDataTypeContext(&trans, it.Get(), &context);
185 EXPECT_TRUE(context.SerializeAsString().empty()); 189 EXPECT_TRUE(context.SerializeAsString().empty());
186 } 190 }
187 EXPECT_FALSE(types_to_purge.Has(BOOKMARKS)); 191 EXPECT_FALSE(types_to_purge.Has(BOOKMARKS));
188 EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS)); 192 EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS));
189 } 193 }
190 194
191 bool SyncableDirectoryTest::IsInDirtyMetahandles(int64 metahandle) { 195 bool SyncableDirectoryTest::IsInDirtyMetahandles(int64_t metahandle) {
192 return 1 == dir_->kernel()->dirty_metahandles.count(metahandle); 196 return 1 == dir_->kernel()->dirty_metahandles.count(metahandle);
193 } 197 }
194 198
195 bool SyncableDirectoryTest::IsInMetahandlesToPurge(int64 metahandle) { 199 bool SyncableDirectoryTest::IsInMetahandlesToPurge(int64_t metahandle) {
196 return 1 == dir_->kernel()->metahandles_to_purge.count(metahandle); 200 return 1 == dir_->kernel()->metahandles_to_purge.count(metahandle);
197 } 201 }
198 202
199 scoped_ptr<Directory>& SyncableDirectoryTest::dir() { 203 scoped_ptr<Directory>& SyncableDirectoryTest::dir() {
200 return dir_; 204 return dir_;
201 } 205 }
202 206
203 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() { 207 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() {
204 return &delegate_; 208 return &delegate_;
205 } 209 }
206 210
207 Encryptor* SyncableDirectoryTest::encryptor() { 211 Encryptor* SyncableDirectoryTest::encryptor() {
208 return &encryptor_; 212 return &encryptor_;
209 } 213 }
210 214
211 215
212 TestUnrecoverableErrorHandler* 216 TestUnrecoverableErrorHandler*
213 SyncableDirectoryTest::unrecoverable_error_handler() { 217 SyncableDirectoryTest::unrecoverable_error_handler() {
214 return &handler_; 218 return &handler_;
215 } 219 }
216 220
217 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans, 221 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans,
218 int64 id, 222 int64_t id,
219 bool check_name, 223 bool check_name,
220 const std::string& name, 224 const std::string& name,
221 int64 base_version, 225 int64_t base_version,
222 int64 server_version, 226 int64_t server_version,
223 bool is_del) { 227 bool is_del) {
224 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id)); 228 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id));
225 ASSERT_TRUE(e.good()); 229 ASSERT_TRUE(e.good());
226 if (check_name) 230 if (check_name)
227 ASSERT_TRUE(name == e.GetNonUniqueName()); 231 ASSERT_TRUE(name == e.GetNonUniqueName());
228 ASSERT_TRUE(base_version == e.GetBaseVersion()); 232 ASSERT_TRUE(base_version == e.GetBaseVersion());
229 ASSERT_TRUE(server_version == e.GetServerVersion()); 233 ASSERT_TRUE(server_version == e.GetServerVersion());
230 ASSERT_TRUE(is_del == e.GetIsDel()); 234 ASSERT_TRUE(is_del == e.GetIsDel());
231 } 235 }
232 236
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 273
270 dir()->HandleSaveChangesFailure(snapshot1); 274 dir()->HandleSaveChangesFailure(snapshot1);
271 275
272 Directory::SaveChangesSnapshot snapshot2; 276 Directory::SaveChangesSnapshot snapshot2;
273 dir()->TakeSnapshotForSaveChanges(&snapshot2); 277 dir()->TakeSnapshotForSaveChanges(&snapshot2);
274 EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge); 278 EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge);
275 } 279 }
276 280
277 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { 281 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) {
278 const int metahandles_to_create = 100; 282 const int metahandles_to_create = 100;
279 std::vector<int64> expected_dirty_metahandles; 283 std::vector<int64_t> expected_dirty_metahandles;
280 { 284 {
281 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 285 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
282 for (int i = 0; i < metahandles_to_create; i++) { 286 for (int i = 0; i < metahandles_to_create; i++) {
283 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); 287 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
284 expected_dirty_metahandles.push_back(e.GetMetahandle()); 288 expected_dirty_metahandles.push_back(e.GetMetahandle());
285 e.PutIsUnsynced(true); 289 e.PutIsUnsynced(true);
286 } 290 }
287 } 291 }
288 // Fake SaveChanges() and make sure we got what we expected. 292 // Fake SaveChanges() and make sure we got what we expected.
289 { 293 {
290 Directory::SaveChangesSnapshot snapshot; 294 Directory::SaveChangesSnapshot snapshot;
291 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); 295 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex);
292 dir()->TakeSnapshotForSaveChanges(&snapshot); 296 dir()->TakeSnapshotForSaveChanges(&snapshot);
293 // Make sure there's an entry for each new metahandle. Make sure all 297 // Make sure there's an entry for each new metahandle. Make sure all
294 // entries are marked dirty. 298 // entries are marked dirty.
295 ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size()); 299 ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size());
296 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); 300 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin();
297 i != snapshot.dirty_metas.end(); 301 i != snapshot.dirty_metas.end();
298 ++i) { 302 ++i) {
299 ASSERT_TRUE((*i)->is_dirty()); 303 ASSERT_TRUE((*i)->is_dirty());
300 } 304 }
301 dir()->VacuumAfterSaveChanges(snapshot); 305 dir()->VacuumAfterSaveChanges(snapshot);
302 } 306 }
303 // Put a new value with existing transactions as well as adding new ones. 307 // Put a new value with existing transactions as well as adding new ones.
304 { 308 {
305 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 309 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
306 std::vector<int64> new_dirty_metahandles; 310 std::vector<int64_t> new_dirty_metahandles;
307 for (std::vector<int64>::const_iterator i = 311 for (std::vector<int64_t>::const_iterator i =
308 expected_dirty_metahandles.begin(); 312 expected_dirty_metahandles.begin();
309 i != expected_dirty_metahandles.end(); 313 i != expected_dirty_metahandles.end(); ++i) {
310 ++i) {
311 // Change existing entries to directories to dirty them. 314 // Change existing entries to directories to dirty them.
312 MutableEntry e1(&trans, GET_BY_HANDLE, *i); 315 MutableEntry e1(&trans, GET_BY_HANDLE, *i);
313 e1.PutIsDir(true); 316 e1.PutIsDir(true);
314 e1.PutIsUnsynced(true); 317 e1.PutIsUnsynced(true);
315 // Add new entries 318 // Add new entries
316 MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar"); 319 MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
317 e2.PutIsUnsynced(true); 320 e2.PutIsUnsynced(true);
318 new_dirty_metahandles.push_back(e2.GetMetahandle()); 321 new_dirty_metahandles.push_back(e2.GetMetahandle());
319 } 322 }
320 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(), 323 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
(...skipping 15 matching lines...) Expand all
336 } 339 }
337 dir()->VacuumAfterSaveChanges(snapshot); 340 dir()->VacuumAfterSaveChanges(snapshot);
338 } 341 }
339 } 342 }
340 343
341 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) { 344 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) {
342 const int metahandles_to_create = 100; 345 const int metahandles_to_create = 100;
343 346
344 // half of 2 * metahandles_to_create 347 // half of 2 * metahandles_to_create
345 const unsigned int number_changed = 100u; 348 const unsigned int number_changed = 100u;
346 std::vector<int64> expected_dirty_metahandles; 349 std::vector<int64_t> expected_dirty_metahandles;
347 { 350 {
348 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 351 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
349 for (int i = 0; i < metahandles_to_create; i++) { 352 for (int i = 0; i < metahandles_to_create; i++) {
350 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); 353 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo");
351 expected_dirty_metahandles.push_back(e.GetMetahandle()); 354 expected_dirty_metahandles.push_back(e.GetMetahandle());
352 e.PutIsUnsynced(true); 355 e.PutIsUnsynced(true);
353 } 356 }
354 } 357 }
355 dir()->SaveChanges(); 358 dir()->SaveChanges();
356 // Put a new value with existing transactions as well as adding new ones. 359 // Put a new value with existing transactions as well as adding new ones.
357 { 360 {
358 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 361 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
359 std::vector<int64> new_dirty_metahandles; 362 std::vector<int64_t> new_dirty_metahandles;
360 for (std::vector<int64>::const_iterator i = 363 for (std::vector<int64_t>::const_iterator i =
361 expected_dirty_metahandles.begin(); 364 expected_dirty_metahandles.begin();
362 i != expected_dirty_metahandles.end(); 365 i != expected_dirty_metahandles.end(); ++i) {
363 ++i) {
364 // Change existing entries to directories to dirty them. 366 // Change existing entries to directories to dirty them.
365 MutableEntry e1(&trans, GET_BY_HANDLE, *i); 367 MutableEntry e1(&trans, GET_BY_HANDLE, *i);
366 ASSERT_TRUE(e1.good()); 368 ASSERT_TRUE(e1.good());
367 e1.PutIsDir(true); 369 e1.PutIsDir(true);
368 e1.PutIsUnsynced(true); 370 e1.PutIsUnsynced(true);
369 // Add new entries 371 // Add new entries
370 MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar"); 372 MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar");
371 e2.PutIsUnsynced(true); 373 e2.PutIsUnsynced(true);
372 new_dirty_metahandles.push_back(e2.GetMetahandle()); 374 new_dirty_metahandles.push_back(e2.GetMetahandle());
373 } 375 }
374 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(), 376 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(),
375 new_dirty_metahandles.begin(), 377 new_dirty_metahandles.begin(),
376 new_dirty_metahandles.end()); 378 new_dirty_metahandles.end());
377 } 379 }
378 dir()->SaveChanges(); 380 dir()->SaveChanges();
379 // Don't make any changes whatsoever and ensure nothing comes back. 381 // Don't make any changes whatsoever and ensure nothing comes back.
380 { 382 {
381 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 383 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
382 for (std::vector<int64>::const_iterator i = 384 for (std::vector<int64_t>::const_iterator i =
383 expected_dirty_metahandles.begin(); 385 expected_dirty_metahandles.begin();
384 i != expected_dirty_metahandles.end(); 386 i != expected_dirty_metahandles.end(); ++i) {
385 ++i) {
386 MutableEntry e(&trans, GET_BY_HANDLE, *i); 387 MutableEntry e(&trans, GET_BY_HANDLE, *i);
387 ASSERT_TRUE(e.good()); 388 ASSERT_TRUE(e.good());
388 // We aren't doing anything to dirty these entries. 389 // We aren't doing anything to dirty these entries.
389 } 390 }
390 } 391 }
391 // Fake SaveChanges() and make sure we got what we expected. 392 // Fake SaveChanges() and make sure we got what we expected.
392 { 393 {
393 Directory::SaveChangesSnapshot snapshot; 394 Directory::SaveChangesSnapshot snapshot;
394 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); 395 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex);
395 dir()->TakeSnapshotForSaveChanges(&snapshot); 396 dir()->TakeSnapshotForSaveChanges(&snapshot);
396 // Make sure there are no dirty_metahandles. 397 // Make sure there are no dirty_metahandles.
397 EXPECT_EQ(0u, snapshot.dirty_metas.size()); 398 EXPECT_EQ(0u, snapshot.dirty_metas.size());
398 dir()->VacuumAfterSaveChanges(snapshot); 399 dir()->VacuumAfterSaveChanges(snapshot);
399 } 400 }
400 { 401 {
401 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 402 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
402 bool should_change = false; 403 bool should_change = false;
403 for (std::vector<int64>::const_iterator i = 404 for (std::vector<int64_t>::const_iterator i =
404 expected_dirty_metahandles.begin(); 405 expected_dirty_metahandles.begin();
405 i != expected_dirty_metahandles.end(); 406 i != expected_dirty_metahandles.end(); ++i) {
406 ++i) {
407 // Maybe change entries by flipping IS_DIR. 407 // Maybe change entries by flipping IS_DIR.
408 MutableEntry e(&trans, GET_BY_HANDLE, *i); 408 MutableEntry e(&trans, GET_BY_HANDLE, *i);
409 ASSERT_TRUE(e.good()); 409 ASSERT_TRUE(e.good());
410 should_change = !should_change; 410 should_change = !should_change;
411 if (should_change) { 411 if (should_change) {
412 bool not_dir = !e.GetIsDir(); 412 bool not_dir = !e.GetIsDir();
413 e.PutIsDir(not_dir); 413 e.PutIsDir(not_dir);
414 e.PutIsUnsynced(true); 414 e.PutIsUnsynced(true);
415 } 415 }
416 } 416 }
(...skipping 19 matching lines...) Expand all
436 TEST_F(SyncableDirectoryTest, ManageDeleteJournals) { 436 TEST_F(SyncableDirectoryTest, ManageDeleteJournals) {
437 sync_pb::EntitySpecifics bookmark_specifics; 437 sync_pb::EntitySpecifics bookmark_specifics;
438 AddDefaultFieldValue(BOOKMARKS, &bookmark_specifics); 438 AddDefaultFieldValue(BOOKMARKS, &bookmark_specifics);
439 bookmark_specifics.mutable_bookmark()->set_url("url"); 439 bookmark_specifics.mutable_bookmark()->set_url("url");
440 440
441 // The first two IDs are server IDs. 441 // The first two IDs are server IDs.
442 Id id1 = TestIdFactory::FromNumber(1); 442 Id id1 = TestIdFactory::FromNumber(1);
443 Id id2 = TestIdFactory::FromNumber(2); 443 Id id2 = TestIdFactory::FromNumber(2);
444 // The third one is a client ID. 444 // The third one is a client ID.
445 Id id3 = TestIdFactory::FromNumber(-3); 445 Id id3 = TestIdFactory::FromNumber(-3);
446 int64 handle1 = 0; 446 int64_t handle1 = 0;
447 int64 handle2 = 0; 447 int64_t handle2 = 0;
448 int64 handle3 = 0; 448 int64_t handle3 = 0;
449 { 449 {
450 // Create 3 bookmark entries and save in database. 450 // Create 3 bookmark entries and save in database.
451 { 451 {
452 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 452 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
453 453
454 MutableEntry item1(&trans, CREATE, BOOKMARKS, trans.root_id(), "item1"); 454 MutableEntry item1(&trans, CREATE, BOOKMARKS, trans.root_id(), "item1");
455 item1.PutId(id1); 455 item1.PutId(id1);
456 item1.PutSpecifics(bookmark_specifics); 456 item1.PutSpecifics(bookmark_specifics);
457 item1.PutServerSpecifics(bookmark_specifics); 457 item1.PutServerSpecifics(bookmark_specifics);
458 item1.PutIsUnappliedUpdate(true); 458 item1.PutIsUnappliedUpdate(true);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 } 580 }
581 } 581 }
582 582
583 TEST_F(SyncableDirectoryTest, TestPurgeDeletedEntriesOnReload) { 583 TEST_F(SyncableDirectoryTest, TestPurgeDeletedEntriesOnReload) {
584 sync_pb::EntitySpecifics specifics; 584 sync_pb::EntitySpecifics specifics;
585 AddDefaultFieldValue(PREFERENCES, &specifics); 585 AddDefaultFieldValue(PREFERENCES, &specifics);
586 586
587 const int kClientCount = 2; 587 const int kClientCount = 2;
588 const int kServerCount = 5; 588 const int kServerCount = 5;
589 const int kTestCount = kClientCount + kServerCount; 589 const int kTestCount = kClientCount + kServerCount;
590 int64 handles[kTestCount]; 590 int64_t handles[kTestCount];
591 591
592 // The idea is to recreate various combinations of IDs, IS_DEL, 592 // The idea is to recreate various combinations of IDs, IS_DEL,
593 // IS_UNSYNCED, and IS_UNAPPLIED_UPDATE flags to test all combinations 593 // IS_UNSYNCED, and IS_UNAPPLIED_UPDATE flags to test all combinations
594 // for DirectoryBackingStore::SafeToPurgeOnLoading. 594 // for DirectoryBackingStore::SafeToPurgeOnLoading.
595 // 0: client ID, IS_DEL, IS_UNSYNCED 595 // 0: client ID, IS_DEL, IS_UNSYNCED
596 // 1: client ID, IS_UNSYNCED 596 // 1: client ID, IS_UNSYNCED
597 // 2: server ID, IS_DEL, IS_UNSYNCED, IS_UNAPPLIED_UPDATE 597 // 2: server ID, IS_DEL, IS_UNSYNCED, IS_UNAPPLIED_UPDATE
598 // 3: server ID, IS_DEL, IS_UNSYNCED 598 // 3: server ID, IS_DEL, IS_UNSYNCED
599 // 4: server ID, IS_DEL, IS_UNAPPLIED_UPDATE 599 // 4: server ID, IS_DEL, IS_UNAPPLIED_UPDATE
600 // 5: server ID, IS_DEL 600 // 5: server ID, IS_DEL
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 item.PutIsUnappliedUpdate(true); 636 item.PutIsUnappliedUpdate(true);
637 } 637 }
638 } 638 }
639 ASSERT_EQ(OPENED, SimulateSaveAndReloadDir()); 639 ASSERT_EQ(OPENED, SimulateSaveAndReloadDir());
640 640
641 // Expect items 0 and 5 to be purged according to 641 // Expect items 0 and 5 to be purged according to
642 // DirectoryBackingStore::SafeToPurgeOnLoading: 642 // DirectoryBackingStore::SafeToPurgeOnLoading:
643 // - Item 0 is an item with IS_DEL flag and client ID. 643 // - Item 0 is an item with IS_DEL flag and client ID.
644 // - Item 5 is an item with IS_DEL flag which has both 644 // - Item 5 is an item with IS_DEL flag which has both
645 // IS_UNSYNCED and IS_UNAPPLIED_UPDATE unset. 645 // IS_UNSYNCED and IS_UNAPPLIED_UPDATE unset.
646 std::vector<int64> expected_purged; 646 std::vector<int64_t> expected_purged;
647 expected_purged.push_back(0); 647 expected_purged.push_back(0);
648 expected_purged.push_back(5); 648 expected_purged.push_back(5);
649 649
650 std::vector<int64> actually_purged; 650 std::vector<int64_t> actually_purged;
651 { 651 {
652 ReadTransaction trans(FROM_HERE, dir().get()); 652 ReadTransaction trans(FROM_HERE, dir().get());
653 for (int i = 0; i < kTestCount; i++) { 653 for (int i = 0; i < kTestCount; i++) {
654 Entry item(&trans, GET_BY_HANDLE, handles[i]); 654 Entry item(&trans, GET_BY_HANDLE, handles[i]);
655 if (!item.good()) { 655 if (!item.good()) {
656 actually_purged.push_back(i); 656 actually_purged.push_back(i);
657 } 657 }
658 } 658 }
659 } 659 }
660 660
(...skipping 30 matching lines...) Expand all
691 e2.PutIsDel(false); 691 e2.PutIsDel(false);
692 e3.PutIsDel(false); 692 e3.PutIsDel(false);
693 693
694 e1.PutIsDel(true); 694 e1.PutIsDel(true);
695 e2.PutIsDel(true); 695 e2.PutIsDel(true);
696 e3.PutIsDel(true); 696 e3.PutIsDel(true);
697 } 697 }
698 698
699 TEST_F(SyncableDirectoryTest, TestGetUnsynced) { 699 TEST_F(SyncableDirectoryTest, TestGetUnsynced) {
700 Directory::Metahandles handles; 700 Directory::Metahandles handles;
701 int64 handle1, handle2; 701 int64_t handle1, handle2;
702 { 702 {
703 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 703 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
704 704
705 dir()->GetUnsyncedMetaHandles(&trans, &handles); 705 dir()->GetUnsyncedMetaHandles(&trans, &handles);
706 ASSERT_EQ(0u, handles.size()); 706 ASSERT_EQ(0u, handles.size());
707 707
708 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba"); 708 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
709 ASSERT_TRUE(e1.good()); 709 ASSERT_TRUE(e1.good());
710 handle1 = e1.GetMetahandle(); 710 handle1 = e1.GetMetahandle();
711 e1.PutBaseVersion(1); 711 e1.PutBaseVersion(1);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 dir()->SaveChanges(); 761 dir()->SaveChanges();
762 { 762 {
763 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 763 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
764 dir()->GetUnsyncedMetaHandles(&trans, &handles); 764 dir()->GetUnsyncedMetaHandles(&trans, &handles);
765 ASSERT_EQ(1u, handles.size()); 765 ASSERT_EQ(1u, handles.size());
766 ASSERT_TRUE(handle2 == handles[0]); 766 ASSERT_TRUE(handle2 == handles[0]);
767 } 767 }
768 } 768 }
769 769
770 TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) { 770 TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) {
771 std::vector<int64> handles; 771 std::vector<int64_t> handles;
772 int64 handle1, handle2; 772 int64_t handle1, handle2;
773 const FullModelTypeSet all_types = FullModelTypeSet::All(); 773 const FullModelTypeSet all_types = FullModelTypeSet::All();
774 { 774 {
775 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 775 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
776 776
777 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); 777 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
778 ASSERT_EQ(0u, handles.size()); 778 ASSERT_EQ(0u, handles.size());
779 779
780 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba"); 780 MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba");
781 ASSERT_TRUE(e1.good()); 781 ASSERT_TRUE(e1.good());
782 handle1 = e1.GetMetahandle(); 782 handle1 = e1.GetMetahandle();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 835 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
836 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); 836 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles);
837 ASSERT_EQ(1u, handles.size()); 837 ASSERT_EQ(1u, handles.size());
838 ASSERT_TRUE(handle2 == handles[0]); 838 ASSERT_TRUE(handle2 == handles[0]);
839 } 839 }
840 } 840 }
841 841
842 TEST_F(SyncableDirectoryTest, DeleteBug_531383) { 842 TEST_F(SyncableDirectoryTest, DeleteBug_531383) {
843 // Try to evoke a check failure... 843 // Try to evoke a check failure...
844 TestIdFactory id_factory; 844 TestIdFactory id_factory;
845 int64 grandchild_handle; 845 int64_t grandchild_handle;
846 { 846 {
847 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get()); 847 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
848 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob"); 848 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob");
849 ASSERT_TRUE(parent.good()); 849 ASSERT_TRUE(parent.good());
850 parent.PutIsDir(true); 850 parent.PutIsDir(true);
851 parent.PutId(id_factory.NewServerId()); 851 parent.PutId(id_factory.NewServerId());
852 parent.PutBaseVersion(1); 852 parent.PutBaseVersion(1);
853 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob"); 853 MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.GetId(), "Bob");
854 ASSERT_TRUE(child.good()); 854 ASSERT_TRUE(child.good());
855 child.PutIsDir(true); 855 child.PutIsDir(true);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 ASSERT_FALSE(IsLegalNewParent(child, grandchild)); 923 ASSERT_FALSE(IsLegalNewParent(child, grandchild));
924 ASSERT_TRUE(IsLegalNewParent(child, parent2)); 924 ASSERT_TRUE(IsLegalNewParent(child, parent2));
925 ASSERT_TRUE(IsLegalNewParent(child, grandchild2)); 925 ASSERT_TRUE(IsLegalNewParent(child, grandchild2));
926 ASSERT_FALSE(IsLegalNewParent(parent, grandchild)); 926 ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
927 ASSERT_FALSE(IsLegalNewParent(root, grandchild)); 927 ASSERT_FALSE(IsLegalNewParent(root, grandchild));
928 ASSERT_FALSE(IsLegalNewParent(parent, grandchild)); 928 ASSERT_FALSE(IsLegalNewParent(parent, grandchild));
929 } 929 }
930 930
931 TEST_F(SyncableDirectoryTest, TestEntryIsInFolder) { 931 TEST_F(SyncableDirectoryTest, TestEntryIsInFolder) {
932 // Create a subdir and an entry. 932 // Create a subdir and an entry.
933 int64 entry_handle; 933 int64_t entry_handle;
934 syncable::Id folder_id; 934 syncable::Id folder_id;
935 syncable::Id entry_id; 935 syncable::Id entry_id;
936 std::string entry_name = "entry"; 936 std::string entry_name = "entry";
937 937
938 { 938 {
939 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); 939 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get());
940 MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "folder"); 940 MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "folder");
941 ASSERT_TRUE(folder.good()); 941 ASSERT_TRUE(folder.good());
942 folder.PutIsDir(true); 942 folder.PutIsDir(true);
943 EXPECT_TRUE(folder.PutIsUnsynced(true)); 943 EXPECT_TRUE(folder.PutIsUnsynced(true));
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 child.PutSpecifics(specifics); 1413 child.PutSpecifics(specifics);
1414 1414
1415 EXPECT_TRUE(child.ShouldMaintainPosition()); 1415 EXPECT_TRUE(child.ShouldMaintainPosition());
1416 EXPECT_TRUE(!child.GetUniquePosition().IsValid()); 1416 EXPECT_TRUE(!child.GetUniquePosition().IsValid());
1417 } 1417 }
1418 1418
1419 EXPECT_EQ(FAILED_DATABASE_CORRUPT, SimulateSaveAndReloadDir()); 1419 EXPECT_EQ(FAILED_DATABASE_CORRUPT, SimulateSaveAndReloadDir());
1420 } 1420 }
1421 1421
1422 TEST_F(SyncableDirectoryTest, General) { 1422 TEST_F(SyncableDirectoryTest, General) {
1423 int64 written_metahandle; 1423 int64_t written_metahandle;
1424 const Id id = TestIdFactory::FromNumber(99); 1424 const Id id = TestIdFactory::FromNumber(99);
1425 std::string name = "Jeff"; 1425 std::string name = "Jeff";
1426 // Test simple read operations on an empty DB. 1426 // Test simple read operations on an empty DB.
1427 { 1427 {
1428 ReadTransaction rtrans(FROM_HERE, dir().get()); 1428 ReadTransaction rtrans(FROM_HERE, dir().get());
1429 Entry e(&rtrans, GET_BY_ID, id); 1429 Entry e(&rtrans, GET_BY_ID, id);
1430 ASSERT_FALSE(e.good()); // Hasn't been written yet. 1430 ASSERT_FALSE(e.good()); // Hasn't been written yet.
1431 1431
1432 Directory::Metahandles child_handles; 1432 Directory::Metahandles child_handles;
1433 dir()->GetChildHandlesById(&rtrans, rtrans.root_id(), &child_handles); 1433 dir()->GetChildHandlesById(&rtrans, rtrans.root_id(), &child_handles);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle); 1490 MutableEntry e(&trans, GET_BY_HANDLE, written_metahandle);
1491 e.PutIsDel(true); 1491 e.PutIsDel(true);
1492 1492
1493 EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), name)); 1493 EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), name));
1494 } 1494 }
1495 1495
1496 dir()->SaveChanges(); 1496 dir()->SaveChanges();
1497 } 1497 }
1498 1498
1499 TEST_F(SyncableDirectoryTest, ChildrenOps) { 1499 TEST_F(SyncableDirectoryTest, ChildrenOps) {
1500 int64 written_metahandle; 1500 int64_t written_metahandle;
1501 const Id id = TestIdFactory::FromNumber(99); 1501 const Id id = TestIdFactory::FromNumber(99);
1502 std::string name = "Jeff"; 1502 std::string name = "Jeff";
1503 { 1503 {
1504 ReadTransaction rtrans(FROM_HERE, dir().get()); 1504 ReadTransaction rtrans(FROM_HERE, dir().get());
1505 Entry e(&rtrans, GET_BY_ID, id); 1505 Entry e(&rtrans, GET_BY_ID, id);
1506 ASSERT_FALSE(e.good()); // Hasn't been written yet. 1506 ASSERT_FALSE(e.good()); // Hasn't been written yet.
1507 1507
1508 Entry root(&rtrans, GET_BY_ID, rtrans.root_id()); 1508 Entry root(&rtrans, GET_BY_ID, rtrans.root_id());
1509 ASSERT_TRUE(root.good()); 1509 ASSERT_TRUE(root.good());
1510 EXPECT_FALSE(dir()->HasChildren(&rtrans, rtrans.root_id())); 1510 EXPECT_FALSE(dir()->HasChildren(&rtrans, rtrans.root_id()));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1551 Entry root(&rtrans, GET_BY_ID, rtrans.root_id()); 1551 Entry root(&rtrans, GET_BY_ID, rtrans.root_id());
1552 ASSERT_TRUE(root.good()); 1552 ASSERT_TRUE(root.good());
1553 EXPECT_FALSE(dir()->HasChildren(&rtrans, rtrans.root_id())); 1553 EXPECT_FALSE(dir()->HasChildren(&rtrans, rtrans.root_id()));
1554 EXPECT_TRUE(root.GetFirstChildId().IsNull()); 1554 EXPECT_TRUE(root.GetFirstChildId().IsNull());
1555 } 1555 }
1556 1556
1557 dir()->SaveChanges(); 1557 dir()->SaveChanges();
1558 } 1558 }
1559 1559
1560 TEST_F(SyncableDirectoryTest, ClientIndexRebuildsProperly) { 1560 TEST_F(SyncableDirectoryTest, ClientIndexRebuildsProperly) {
1561 int64 written_metahandle; 1561 int64_t written_metahandle;
1562 TestIdFactory factory; 1562 TestIdFactory factory;
1563 const Id id = factory.NewServerId(); 1563 const Id id = factory.NewServerId();
1564 std::string name = "cheesepuffs"; 1564 std::string name = "cheesepuffs";
1565 std::string tag = "dietcoke"; 1565 std::string tag = "dietcoke";
1566 1566
1567 // Test creating a new meta entry. 1567 // Test creating a new meta entry.
1568 { 1568 {
1569 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get()); 1569 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get());
1570 MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); 1570 MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name);
1571 ASSERT_TRUE(me.good()); 1571 ASSERT_TRUE(me.good());
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
2131 EXPECT_FALSE(dir()->InitialSyncEndedForType(&trans, PREFERENCES)); 2131 EXPECT_FALSE(dir()->InitialSyncEndedForType(&trans, PREFERENCES));
2132 2132
2133 // Mark as complete and verify. 2133 // Mark as complete and verify.
2134 dir()->MarkInitialSyncEndedForType(&trans, PREFERENCES); 2134 dir()->MarkInitialSyncEndedForType(&trans, PREFERENCES);
2135 EXPECT_TRUE(dir()->InitialSyncEndedForType(&trans, PREFERENCES)); 2135 EXPECT_TRUE(dir()->InitialSyncEndedForType(&trans, PREFERENCES));
2136 } 2136 }
2137 2137
2138 } // namespace syncable 2138 } // namespace syncable
2139 2139
2140 } // namespace syncer 2140 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/syncable/directory_unittest.h ('k') | sync/syncable/entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698