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 |