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

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

Issue 1057663002: [Sync] Eliminate friends from Directory by exposing kernel via accessor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Changes from review. Created 5 years, 8 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
« no previous file with comments | « sync/syncable/directory.cc ('k') | sync/syncable/model_neutral_mutable_entry.cc » ('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 "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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « sync/syncable/directory.cc ('k') | sync/syncable/model_neutral_mutable_entry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698