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

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

Issue 2830027: Remove extended attributes. The lame broken codepath in the DBS was causing (Closed)
Patch Set: Synced with TOT, resolved conflicts. Created 10 years, 5 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 using std::set; 42 using std::set;
43 using std::string; 43 using std::string;
44 44
45 namespace browser_sync { 45 namespace browser_sync {
46 46
47 using syncable::BaseTransaction; 47 using syncable::BaseTransaction;
48 using syncable::Blob; 48 using syncable::Blob;
49 using syncable::CountEntriesWithName; 49 using syncable::CountEntriesWithName;
50 using syncable::Directory; 50 using syncable::Directory;
51 using syncable::Entry; 51 using syncable::Entry;
52 using syncable::ExtendedAttribute;
53 using syncable::ExtendedAttributeKey;
54 using syncable::GetFirstEntryWithName; 52 using syncable::GetFirstEntryWithName;
55 using syncable::GetOnlyEntryWithName; 53 using syncable::GetOnlyEntryWithName;
56 using syncable::Id; 54 using syncable::Id;
57 using syncable::MutableEntry; 55 using syncable::MutableEntry;
58 using syncable::MutableExtendedAttribute;
59 using syncable::ReadTransaction; 56 using syncable::ReadTransaction;
60 using syncable::ScopedDirLookup; 57 using syncable::ScopedDirLookup;
61 using syncable::WriteTransaction; 58 using syncable::WriteTransaction;
62 59
63 using syncable::BASE_VERSION; 60 using syncable::BASE_VERSION;
64 using syncable::CREATE; 61 using syncable::CREATE;
65 using syncable::CREATE_NEW_UPDATE_ITEM; 62 using syncable::CREATE_NEW_UPDATE_ITEM;
66 using syncable::GET_BY_HANDLE; 63 using syncable::GET_BY_HANDLE;
67 using syncable::GET_BY_ID; 64 using syncable::GET_BY_ID;
68 using syncable::GET_BY_CLIENT_TAG; 65 using syncable::GET_BY_CLIENT_TAG;
(...skipping 19 matching lines...) Expand all
88 using syncable::UNIQUE_SERVER_TAG; 85 using syncable::UNIQUE_SERVER_TAG;
89 using syncable::SPECIFICS; 86 using syncable::SPECIFICS;
90 using syncable::UNITTEST; 87 using syncable::UNITTEST;
91 88
92 using sessions::ConflictProgress; 89 using sessions::ConflictProgress;
93 using sessions::ScopedSetSessionWriteTransaction; 90 using sessions::ScopedSetSessionWriteTransaction;
94 using sessions::StatusController; 91 using sessions::StatusController;
95 using sessions::SyncSessionContext; 92 using sessions::SyncSessionContext;
96 using sessions::SyncSession; 93 using sessions::SyncSession;
97 94
98 namespace {
99 const char* kTestData = "Hello World!";
100 const int kTestDataLen = 12;
101 const int64 kTestLogRequestTimestamp = 123456;
102 } // namespace
103
104 class SyncerTest : public testing::Test, 95 class SyncerTest : public testing::Test,
105 public SyncSession::Delegate, 96 public SyncSession::Delegate,
106 public ModelSafeWorkerRegistrar, 97 public ModelSafeWorkerRegistrar,
107 public ChannelEventHandler<SyncerEvent> { 98 public ChannelEventHandler<SyncerEvent> {
108 protected: 99 protected:
109 SyncerTest() : syncer_(NULL) {} 100 SyncerTest() : syncer_(NULL) {}
110 101
111 // SyncSession::Delegate implementation. 102 // SyncSession::Delegate implementation.
112 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) { 103 virtual void OnSilencedUntil(const base::TimeTicks& silenced_until) {
113 FAIL() << "Should not get silenced."; 104 FAIL() << "Should not get silenced.";
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 virtual void TearDown() { 195 virtual void TearDown() {
205 mock_server_.reset(); 196 mock_server_.reset();
206 hookup_.reset(); 197 hookup_.reset();
207 delete syncer_; 198 delete syncer_;
208 syncer_ = NULL; 199 syncer_ = NULL;
209 syncdb_.TearDown(); 200 syncdb_.TearDown();
210 } 201 }
211 void WriteTestDataToEntry(WriteTransaction* trans, MutableEntry* entry) { 202 void WriteTestDataToEntry(WriteTransaction* trans, MutableEntry* entry) {
212 EXPECT_FALSE(entry->Get(IS_DIR)); 203 EXPECT_FALSE(entry->Get(IS_DIR));
213 EXPECT_FALSE(entry->Get(IS_DEL)); 204 EXPECT_FALSE(entry->Get(IS_DEL));
214 Blob test_value(kTestData, kTestData + kTestDataLen);
215 ExtendedAttributeKey key(entry->Get(META_HANDLE), "DATA");
216 MutableExtendedAttribute attr(trans, CREATE, key);
217 attr.mutable_value()->swap(test_value);
218 sync_pb::EntitySpecifics specifics; 205 sync_pb::EntitySpecifics specifics;
219 specifics.MutableExtension(sync_pb::bookmark)->set_url("http://demo/"); 206 specifics.MutableExtension(sync_pb::bookmark)->set_url("http://demo/");
220 specifics.MutableExtension(sync_pb::bookmark)->set_favicon("PNG"); 207 specifics.MutableExtension(sync_pb::bookmark)->set_favicon("PNG");
221 entry->Put(syncable::SPECIFICS, specifics); 208 entry->Put(syncable::SPECIFICS, specifics);
222 entry->Put(syncable::IS_UNSYNCED, true); 209 entry->Put(syncable::IS_UNSYNCED, true);
223 } 210 }
224 void VerifyTestDataInEntry(BaseTransaction* trans, Entry* entry) { 211 void VerifyTestDataInEntry(BaseTransaction* trans, Entry* entry) {
225 EXPECT_FALSE(entry->Get(IS_DIR)); 212 EXPECT_FALSE(entry->Get(IS_DIR));
226 EXPECT_FALSE(entry->Get(IS_DEL)); 213 EXPECT_FALSE(entry->Get(IS_DEL));
227 Blob test_value(kTestData, kTestData + kTestDataLen);
228 ExtendedAttributeKey key(entry->Get(META_HANDLE), "DATA");
229 ExtendedAttribute attr(trans, GET_BY_HANDLE, key);
230 EXPECT_FALSE(attr.is_deleted());
231 EXPECT_TRUE(test_value == attr.value());
232 VerifyTestBookmarkDataInEntry(entry); 214 VerifyTestBookmarkDataInEntry(entry);
233 } 215 }
234 void VerifyTestBookmarkDataInEntry(Entry* entry) { 216 void VerifyTestBookmarkDataInEntry(Entry* entry) {
235 const sync_pb::EntitySpecifics& specifics = entry->Get(syncable::SPECIFICS); 217 const sync_pb::EntitySpecifics& specifics = entry->Get(syncable::SPECIFICS);
236 EXPECT_TRUE(specifics.HasExtension(sync_pb::bookmark)); 218 EXPECT_TRUE(specifics.HasExtension(sync_pb::bookmark));
237 EXPECT_EQ("PNG", specifics.GetExtension(sync_pb::bookmark).favicon()); 219 EXPECT_EQ("PNG", specifics.GetExtension(sync_pb::bookmark).favicon());
238 EXPECT_EQ("http://demo/", specifics.GetExtension(sync_pb::bookmark).url()); 220 EXPECT_EQ("http://demo/", specifics.GetExtension(sync_pb::bookmark).url());
239 } 221 }
240 222
241 void SyncRepeatedlyToTriggerConflictResolution(SyncSession* session) { 223 void SyncRepeatedlyToTriggerConflictResolution(SyncSession* session) {
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 EXPECT_TRUE(iterator.Current() == session_metahandles[2]); 517 EXPECT_TRUE(iterator.Current() == session_metahandles[2]);
536 EXPECT_FALSE(iterator.Increment()); 518 EXPECT_FALSE(iterator.Increment());
537 519
538 EXPECT_FALSE(iterator.Valid()); 520 EXPECT_FALSE(iterator.Valid());
539 } 521 }
540 } 522 }
541 523
542 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) { 524 TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) {
543 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name()); 525 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name());
544 ASSERT_TRUE(dir.good()); 526 ASSERT_TRUE(dir.good());
545 string xattr_key = "key";
546 { 527 {
547 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); 528 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__);
548 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), 529 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(),
549 "Pete"); 530 "Pete");
550 ASSERT_TRUE(parent.good()); 531 ASSERT_TRUE(parent.good());
551 parent.Put(syncable::IS_UNSYNCED, true); 532 parent.Put(syncable::IS_UNSYNCED, true);
552 parent.Put(syncable::IS_DIR, true); 533 parent.Put(syncable::IS_DIR, true);
553 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); 534 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics());
554 parent.Put(syncable::BASE_VERSION, 1); 535 parent.Put(syncable::BASE_VERSION, 1);
555 parent.Put(syncable::ID, parent_id_); 536 parent.Put(syncable::ID, parent_id_);
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name()); 1041 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name());
1061 ASSERT_TRUE(dir.good()); 1042 ASSERT_TRUE(dir.good());
1062 mock_server_->AddUpdateDirectory(1, 0, "foo:", 1, 10); 1043 mock_server_->AddUpdateDirectory(1, 0, "foo:", 1, 10);
1063 syncer_->SyncShare(this); 1044 syncer_->SyncShare(this);
1064 mock_server_->AddUpdateDirectory(2, 0, "foo:", 1, 20); 1045 mock_server_->AddUpdateDirectory(2, 0, "foo:", 1, 20);
1065 SyncRepeatedlyToTriggerStuckSignal(session_.get()); 1046 SyncRepeatedlyToTriggerStuckSignal(session_.get());
1066 EXPECT_FALSE(session_->status_controller()->syncer_status().syncer_stuck); 1047 EXPECT_FALSE(session_->status_controller()->syncer_status().syncer_stuck);
1067 syncer_events_.clear(); 1048 syncer_events_.clear();
1068 } 1049 }
1069 1050
1070 TEST_F(SyncerTest, ExtendedAttributeWithNullCharacter) {
1071 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name());
1072 ASSERT_TRUE(dir.good());
1073 size_t xattr_count = 2;
1074 string xattr_keys[] = { "key", "key2" };
1075 syncable::Blob xattr_values[2];
1076 const char* value[] = { "value", "val\0ue" };
1077 int value_length[] = { 5, 6 };
1078 for (size_t i = 0; i < xattr_count; i++) {
1079 for (int j = 0; j < value_length[i]; j++)
1080 xattr_values[i].push_back(value[i][j]);
1081 }
1082 sync_pb::SyncEntity* ent =
1083 mock_server_->AddUpdateBookmark(1, 0, "bob", 1, 10);
1084 mock_server_->AddUpdateExtendedAttributes(
1085 ent, xattr_keys, xattr_values, xattr_count);
1086
1087 // Add some other items.
1088 mock_server_->AddUpdateBookmark(2, 0, "fred", 2, 10);
1089 mock_server_->AddUpdateBookmark(3, 0, "sue", 15, 10);
1090
1091 syncer_->SyncShare(this);
1092 ReadTransaction trans(dir, __FILE__, __LINE__);
1093 Entry entry1(&trans, syncable::GET_BY_ID, ids_.FromNumber(1));
1094 ASSERT_TRUE(entry1.good());
1095 EXPECT_TRUE(1 == entry1.Get(syncable::BASE_VERSION));
1096 EXPECT_TRUE(1 == entry1.Get(syncable::SERVER_VERSION));
1097 set<ExtendedAttribute> client_extended_attributes;
1098 entry1.GetAllExtendedAttributes(&trans, &client_extended_attributes);
1099 EXPECT_TRUE(xattr_count == client_extended_attributes.size());
1100 for (size_t i = 0; i < xattr_count; i++) {
1101 ExtendedAttributeKey key(entry1.Get(syncable::META_HANDLE), xattr_keys[i]);
1102 ExtendedAttribute expected_xattr(&trans, syncable::GET_BY_HANDLE, key);
1103 EXPECT_TRUE(expected_xattr.good());
1104 for (int j = 0; j < value_length[i]; ++j) {
1105 EXPECT_TRUE(xattr_values[i][j] ==
1106 static_cast<char>(expected_xattr.value().at(j)));
1107 }
1108 }
1109 Entry entry2(&trans, syncable::GET_BY_ID, ids_.FromNumber(2));
1110 ASSERT_TRUE(entry2.good());
1111 Entry entry3(&trans, syncable::GET_BY_ID, ids_.FromNumber(3));
1112 ASSERT_TRUE(entry3.good());
1113 }
1114
1115 TEST_F(SyncerTest, TestBasicUpdate) { 1051 TEST_F(SyncerTest, TestBasicUpdate) {
1116 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name()); 1052 ScopedDirLookup dir(syncdb_.manager(), syncdb_.name());
1117 ASSERT_TRUE(dir.good()); 1053 ASSERT_TRUE(dir.good());
1118 string id = "some_id"; 1054 string id = "some_id";
1119 string parent_id = "0"; 1055 string parent_id = "0";
1120 string name = "in_root"; 1056 string name = "in_root";
1121 int64 version = 10; 1057 int64 version = 10;
1122 int64 timestamp = 10; 1058 int64 timestamp = 10;
1123 mock_server_->AddUpdateDirectory(id, parent_id, name, version, timestamp); 1059 mock_server_->AddUpdateDirectory(id, parent_id, name, version, timestamp);
1124 1060
(...skipping 3291 matching lines...) Expand 10 before | Expand all | Expand 10 after
4416 Add(low_id_); 4352 Add(low_id_);
4417 Add(high_id_); 4353 Add(high_id_);
4418 syncer_->SyncShare(this); 4354 syncer_->SyncShare(this);
4419 ExpectLocalOrderIsByServerId(); 4355 ExpectLocalOrderIsByServerId();
4420 } 4356 }
4421 4357
4422 const SyncerTest::CommitOrderingTest 4358 const SyncerTest::CommitOrderingTest
4423 SyncerTest::CommitOrderingTest::LAST_COMMIT_ITEM = {-1, TestIdFactory::root()}; 4359 SyncerTest::CommitOrderingTest::LAST_COMMIT_ITEM = {-1, TestIdFactory::root()};
4424 4360
4425 } // namespace browser_sync 4361 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/build_commit_command.cc ('k') | chrome/browser/sync/engine/syncer_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698