| OLD | NEW |
| 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 "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "base/test/values_test_util.h" | 8 #include "base/test/values_test_util.h" |
| 9 #include "sync/internal_api/public/base/attachment_id_proto.h" | 9 #include "sync/internal_api/public/base/attachment_id_proto.h" |
| 10 #include "sync/syncable/syncable_proto_util.h" | 10 #include "sync/syncable/syncable_proto_util.h" |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 void SyncableDirectoryTest::CheckPurgeEntriesWithTypeInSucceeded( | 148 void SyncableDirectoryTest::CheckPurgeEntriesWithTypeInSucceeded( |
| 149 ModelTypeSet types_to_purge, | 149 ModelTypeSet types_to_purge, |
| 150 bool before_reload) { | 150 bool before_reload) { |
| 151 SCOPED_TRACE(testing::Message("Before reload: ") << before_reload); | 151 SCOPED_TRACE(testing::Message("Before reload: ") << before_reload); |
| 152 { | 152 { |
| 153 ReadTransaction trans(FROM_HERE, dir_.get()); | 153 ReadTransaction trans(FROM_HERE, dir_.get()); |
| 154 MetahandleSet all_set; | 154 MetahandleSet all_set; |
| 155 dir_->GetAllMetaHandles(&trans, &all_set); | 155 dir_->GetAllMetaHandles(&trans, &all_set); |
| 156 EXPECT_EQ(4U, all_set.size()); | 156 EXPECT_EQ(4U, all_set.size()); |
| 157 if (before_reload) | 157 if (before_reload) |
| 158 EXPECT_EQ(6U, dir_->kernel_->metahandles_to_purge.size()); | 158 EXPECT_EQ(6U, dir_->kernel()->metahandles_to_purge.size()); |
| 159 for (MetahandleSet::iterator iter = all_set.begin(); iter != all_set.end(); | 159 for (MetahandleSet::iterator iter = all_set.begin(); iter != all_set.end(); |
| 160 ++iter) { | 160 ++iter) { |
| 161 Entry e(&trans, GET_BY_HANDLE, *iter); | 161 Entry e(&trans, GET_BY_HANDLE, *iter); |
| 162 const ModelType local_type = e.GetModelType(); | 162 const ModelType local_type = e.GetModelType(); |
| 163 const ModelType server_type = e.GetServerModelType(); | 163 const ModelType server_type = e.GetServerModelType(); |
| 164 | 164 |
| 165 // Note the dance around incrementing |it|, since we sometimes erase(). | 165 // Note the dance around incrementing |it|, since we sometimes erase(). |
| 166 if ((IsRealDataType(local_type) && types_to_purge.Has(local_type)) || | 166 if ((IsRealDataType(local_type) && types_to_purge.Has(local_type)) || |
| 167 (IsRealDataType(server_type) && types_to_purge.Has(server_type))) { | 167 (IsRealDataType(server_type) && types_to_purge.Has(server_type))) { |
| 168 FAIL() << "Illegal type should have been deleted."; | 168 FAIL() << "Illegal type should have been deleted."; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 180 ReadTransaction trans(FROM_HERE, dir_.get()); | 180 ReadTransaction trans(FROM_HERE, dir_.get()); |
| 181 sync_pb::DataTypeContext context; | 181 sync_pb::DataTypeContext context; |
| 182 dir_->GetDataTypeContext(&trans, it.Get(), &context); | 182 dir_->GetDataTypeContext(&trans, it.Get(), &context); |
| 183 EXPECT_TRUE(context.SerializeAsString().empty()); | 183 EXPECT_TRUE(context.SerializeAsString().empty()); |
| 184 } | 184 } |
| 185 EXPECT_FALSE(types_to_purge.Has(BOOKMARKS)); | 185 EXPECT_FALSE(types_to_purge.Has(BOOKMARKS)); |
| 186 EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS)); | 186 EXPECT_TRUE(dir_->InitialSyncEndedForType(BOOKMARKS)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 bool SyncableDirectoryTest::IsInDirtyMetahandles(int64 metahandle) { | 189 bool SyncableDirectoryTest::IsInDirtyMetahandles(int64 metahandle) { |
| 190 return 1 == dir_->kernel_->dirty_metahandles.count(metahandle); | 190 return 1 == dir_->kernel()->dirty_metahandles.count(metahandle); |
| 191 } | 191 } |
| 192 | 192 |
| 193 bool SyncableDirectoryTest::IsInMetahandlesToPurge(int64 metahandle) { | 193 bool SyncableDirectoryTest::IsInMetahandlesToPurge(int64 metahandle) { |
| 194 return 1 == dir_->kernel_->metahandles_to_purge.count(metahandle); | 194 return 1 == dir_->kernel()->metahandles_to_purge.count(metahandle); |
| 195 } | 195 } |
| 196 | 196 |
| 197 scoped_ptr<Directory>& SyncableDirectoryTest::dir() { | 197 scoped_ptr<Directory>& SyncableDirectoryTest::dir() { |
| 198 return dir_; | 198 return dir_; |
| 199 } | 199 } |
| 200 | 200 |
| 201 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() { | 201 DirectoryChangeDelegate* SyncableDirectoryTest::directory_change_delegate() { |
| 202 return &delegate_; | 202 return &delegate_; |
| 203 } | 203 } |
| 204 | 204 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 } | 249 } |
| 250 e.PutSpecifics(specs); | 250 e.PutSpecifics(specs); |
| 251 e.PutServerSpecifics(specs); | 251 e.PutServerSpecifics(specs); |
| 252 } | 252 } |
| 253 } | 253 } |
| 254 | 254 |
| 255 ModelTypeSet to_purge(BOOKMARKS); | 255 ModelTypeSet to_purge(BOOKMARKS); |
| 256 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); | 256 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); |
| 257 | 257 |
| 258 Directory::SaveChangesSnapshot snapshot1; | 258 Directory::SaveChangesSnapshot snapshot1; |
| 259 base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex); | 259 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 260 dir()->TakeSnapshotForSaveChanges(&snapshot1); | 260 dir()->TakeSnapshotForSaveChanges(&snapshot1); |
| 261 EXPECT_TRUE(expected_purges == snapshot1.metahandles_to_purge); | 261 EXPECT_TRUE(expected_purges == snapshot1.metahandles_to_purge); |
| 262 | 262 |
| 263 to_purge.Clear(); | 263 to_purge.Clear(); |
| 264 to_purge.Put(PREFERENCES); | 264 to_purge.Put(PREFERENCES); |
| 265 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); | 265 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); |
| 266 | 266 |
| 267 dir()->HandleSaveChangesFailure(snapshot1); | 267 dir()->HandleSaveChangesFailure(snapshot1); |
| 268 | 268 |
| 269 Directory::SaveChangesSnapshot snapshot2; | 269 Directory::SaveChangesSnapshot snapshot2; |
| 270 dir()->TakeSnapshotForSaveChanges(&snapshot2); | 270 dir()->TakeSnapshotForSaveChanges(&snapshot2); |
| 271 EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge); | 271 EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge); |
| 272 } | 272 } |
| 273 | 273 |
| 274 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { | 274 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { |
| 275 const int metahandles_to_create = 100; | 275 const int metahandles_to_create = 100; |
| 276 std::vector<int64> expected_dirty_metahandles; | 276 std::vector<int64> expected_dirty_metahandles; |
| 277 { | 277 { |
| 278 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 278 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 279 for (int i = 0; i < metahandles_to_create; i++) { | 279 for (int i = 0; i < metahandles_to_create; i++) { |
| 280 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); | 280 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); |
| 281 expected_dirty_metahandles.push_back(e.GetMetahandle()); | 281 expected_dirty_metahandles.push_back(e.GetMetahandle()); |
| 282 e.PutIsUnsynced(true); | 282 e.PutIsUnsynced(true); |
| 283 } | 283 } |
| 284 } | 284 } |
| 285 // Fake SaveChanges() and make sure we got what we expected. | 285 // Fake SaveChanges() and make sure we got what we expected. |
| 286 { | 286 { |
| 287 Directory::SaveChangesSnapshot snapshot; | 287 Directory::SaveChangesSnapshot snapshot; |
| 288 base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex); | 288 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 289 dir()->TakeSnapshotForSaveChanges(&snapshot); | 289 dir()->TakeSnapshotForSaveChanges(&snapshot); |
| 290 // Make sure there's an entry for each new metahandle. Make sure all | 290 // Make sure there's an entry for each new metahandle. Make sure all |
| 291 // entries are marked dirty. | 291 // entries are marked dirty. |
| 292 ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size()); | 292 ASSERT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size()); |
| 293 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); | 293 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); |
| 294 i != snapshot.dirty_metas.end(); | 294 i != snapshot.dirty_metas.end(); |
| 295 ++i) { | 295 ++i) { |
| 296 ASSERT_TRUE((*i)->is_dirty()); | 296 ASSERT_TRUE((*i)->is_dirty()); |
| 297 } | 297 } |
| 298 dir()->VacuumAfterSaveChanges(snapshot); | 298 dir()->VacuumAfterSaveChanges(snapshot); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 314 e2.PutIsUnsynced(true); | 314 e2.PutIsUnsynced(true); |
| 315 new_dirty_metahandles.push_back(e2.GetMetahandle()); | 315 new_dirty_metahandles.push_back(e2.GetMetahandle()); |
| 316 } | 316 } |
| 317 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(), | 317 expected_dirty_metahandles.insert(expected_dirty_metahandles.end(), |
| 318 new_dirty_metahandles.begin(), | 318 new_dirty_metahandles.begin(), |
| 319 new_dirty_metahandles.end()); | 319 new_dirty_metahandles.end()); |
| 320 } | 320 } |
| 321 // Fake SaveChanges() and make sure we got what we expected. | 321 // Fake SaveChanges() and make sure we got what we expected. |
| 322 { | 322 { |
| 323 Directory::SaveChangesSnapshot snapshot; | 323 Directory::SaveChangesSnapshot snapshot; |
| 324 base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex); | 324 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 325 dir()->TakeSnapshotForSaveChanges(&snapshot); | 325 dir()->TakeSnapshotForSaveChanges(&snapshot); |
| 326 // Make sure there's an entry for each new metahandle. Make sure all | 326 // Make sure there's an entry for each new metahandle. Make sure all |
| 327 // entries are marked dirty. | 327 // entries are marked dirty. |
| 328 EXPECT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size()); | 328 EXPECT_EQ(expected_dirty_metahandles.size(), snapshot.dirty_metas.size()); |
| 329 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); | 329 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); |
| 330 i != snapshot.dirty_metas.end(); | 330 i != snapshot.dirty_metas.end(); |
| 331 ++i) { | 331 ++i) { |
| 332 EXPECT_TRUE((*i)->is_dirty()); | 332 EXPECT_TRUE((*i)->is_dirty()); |
| 333 } | 333 } |
| 334 dir()->VacuumAfterSaveChanges(snapshot); | 334 dir()->VacuumAfterSaveChanges(snapshot); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 381 i != expected_dirty_metahandles.end(); | 381 i != expected_dirty_metahandles.end(); |
| 382 ++i) { | 382 ++i) { |
| 383 MutableEntry e(&trans, GET_BY_HANDLE, *i); | 383 MutableEntry e(&trans, GET_BY_HANDLE, *i); |
| 384 ASSERT_TRUE(e.good()); | 384 ASSERT_TRUE(e.good()); |
| 385 // We aren't doing anything to dirty these entries. | 385 // We aren't doing anything to dirty these entries. |
| 386 } | 386 } |
| 387 } | 387 } |
| 388 // Fake SaveChanges() and make sure we got what we expected. | 388 // Fake SaveChanges() and make sure we got what we expected. |
| 389 { | 389 { |
| 390 Directory::SaveChangesSnapshot snapshot; | 390 Directory::SaveChangesSnapshot snapshot; |
| 391 base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex); | 391 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 392 dir()->TakeSnapshotForSaveChanges(&snapshot); | 392 dir()->TakeSnapshotForSaveChanges(&snapshot); |
| 393 // Make sure there are no dirty_metahandles. | 393 // Make sure there are no dirty_metahandles. |
| 394 EXPECT_EQ(0u, snapshot.dirty_metas.size()); | 394 EXPECT_EQ(0u, snapshot.dirty_metas.size()); |
| 395 dir()->VacuumAfterSaveChanges(snapshot); | 395 dir()->VacuumAfterSaveChanges(snapshot); |
| 396 } | 396 } |
| 397 { | 397 { |
| 398 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 398 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 399 bool should_change = false; | 399 bool should_change = false; |
| 400 for (std::vector<int64>::const_iterator i = | 400 for (std::vector<int64>::const_iterator i = |
| 401 expected_dirty_metahandles.begin(); | 401 expected_dirty_metahandles.begin(); |
| 402 i != expected_dirty_metahandles.end(); | 402 i != expected_dirty_metahandles.end(); |
| 403 ++i) { | 403 ++i) { |
| 404 // Maybe change entries by flipping IS_DIR. | 404 // Maybe change entries by flipping IS_DIR. |
| 405 MutableEntry e(&trans, GET_BY_HANDLE, *i); | 405 MutableEntry e(&trans, GET_BY_HANDLE, *i); |
| 406 ASSERT_TRUE(e.good()); | 406 ASSERT_TRUE(e.good()); |
| 407 should_change = !should_change; | 407 should_change = !should_change; |
| 408 if (should_change) { | 408 if (should_change) { |
| 409 bool not_dir = !e.GetIsDir(); | 409 bool not_dir = !e.GetIsDir(); |
| 410 e.PutIsDir(not_dir); | 410 e.PutIsDir(not_dir); |
| 411 e.PutIsUnsynced(true); | 411 e.PutIsUnsynced(true); |
| 412 } | 412 } |
| 413 } | 413 } |
| 414 } | 414 } |
| 415 // Fake SaveChanges() and make sure we got what we expected. | 415 // Fake SaveChanges() and make sure we got what we expected. |
| 416 { | 416 { |
| 417 Directory::SaveChangesSnapshot snapshot; | 417 Directory::SaveChangesSnapshot snapshot; |
| 418 base::AutoLock scoped_lock(dir()->kernel_->save_changes_mutex); | 418 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 419 dir()->TakeSnapshotForSaveChanges(&snapshot); | 419 dir()->TakeSnapshotForSaveChanges(&snapshot); |
| 420 // Make sure there's an entry for each changed metahandle. Make sure all | 420 // Make sure there's an entry for each changed metahandle. Make sure all |
| 421 // entries are marked dirty. | 421 // entries are marked dirty. |
| 422 EXPECT_EQ(number_changed, snapshot.dirty_metas.size()); | 422 EXPECT_EQ(number_changed, snapshot.dirty_metas.size()); |
| 423 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); | 423 for (EntryKernelSet::const_iterator i = snapshot.dirty_metas.begin(); |
| 424 i != snapshot.dirty_metas.end(); | 424 i != snapshot.dirty_metas.end(); |
| 425 ++i) { | 425 ++i) { |
| 426 EXPECT_TRUE((*i)->is_dirty()); | 426 EXPECT_TRUE((*i)->is_dirty()); |
| 427 } | 427 } |
| 428 dir()->VacuumAfterSaveChanges(snapshot); | 428 dir()->VacuumAfterSaveChanges(snapshot); |
| (...skipping 1573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2002 | 2002 |
| 2003 Entry item2(&trans, GET_BY_ID, item2_id); | 2003 Entry item2(&trans, GET_BY_ID, item2_id); |
| 2004 EXPECT_EQ(item1_id, item2.GetPredecessorId()); | 2004 EXPECT_EQ(item1_id, item2.GetPredecessorId()); |
| 2005 EXPECT_EQ(Id(), item2.GetSuccessorId()); | 2005 EXPECT_EQ(Id(), item2.GetSuccessorId()); |
| 2006 } | 2006 } |
| 2007 } | 2007 } |
| 2008 | 2008 |
| 2009 } // namespace syncable | 2009 } // namespace syncable |
| 2010 | 2010 |
| 2011 } // namespace syncer | 2011 } // namespace syncer |
| OLD | NEW |