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

Side by Side Diff: sync/engine/directory_update_handler_unittest.cc

Issue 161253002: sync: Add interfaces for per-type sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another win compile fix Created 6 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « sync/engine/directory_update_handler.cc ('k') | sync/engine/download_unittest.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/engine/sync_directory_update_handler.h" 5 #include "sync/engine/directory_update_handler.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "sync/engine/syncer_proto_util.h" 10 #include "sync/engine/syncer_proto_util.h"
11 #include "sync/internal_api/public/base/model_type.h" 11 #include "sync/internal_api/public/base/model_type.h"
12 #include "sync/internal_api/public/test/test_entry_factory.h" 12 #include "sync/internal_api/public/test/test_entry_factory.h"
13 #include "sync/protocol/sync.pb.h" 13 #include "sync/protocol/sync.pb.h"
14 #include "sync/sessions/status_controller.h" 14 #include "sync/sessions/status_controller.h"
15 #include "sync/syncable/directory.h" 15 #include "sync/syncable/directory.h"
(...skipping 11 matching lines...) Expand all
27 27
28 namespace syncer { 28 namespace syncer {
29 29
30 using syncable::UNITTEST; 30 using syncable::UNITTEST;
31 31
32 // A test harness for tests that focus on processing updates. 32 // A test harness for tests that focus on processing updates.
33 // 33 //
34 // Update processing is what occurs when we first download updates. It converts 34 // Update processing is what occurs when we first download updates. It converts
35 // the received protobuf message into information in the syncable::Directory. 35 // the received protobuf message into information in the syncable::Directory.
36 // Any invalid or redundant updates will be dropped at this point. 36 // Any invalid or redundant updates will be dropped at this point.
37 class SyncDirectoryUpdateHandlerProcessUpdateTest : public ::testing::Test { 37 class DirectoryUpdateHandlerProcessUpdateTest : public ::testing::Test {
38 public: 38 public:
39 SyncDirectoryUpdateHandlerProcessUpdateTest() 39 DirectoryUpdateHandlerProcessUpdateTest()
40 : ui_worker_(new FakeModelWorker(GROUP_UI)) { 40 : ui_worker_(new FakeModelWorker(GROUP_UI)) {
41 } 41 }
42 42
43 virtual ~SyncDirectoryUpdateHandlerProcessUpdateTest() {} 43 virtual ~DirectoryUpdateHandlerProcessUpdateTest() {}
44 44
45 virtual void SetUp() OVERRIDE { 45 virtual void SetUp() OVERRIDE {
46 dir_maker_.SetUp(); 46 dir_maker_.SetUp();
47 } 47 }
48 48
49 virtual void TearDown() OVERRIDE { 49 virtual void TearDown() OVERRIDE {
50 dir_maker_.TearDown(); 50 dir_maker_.TearDown();
51 } 51 }
52 52
53 syncable::Directory* dir() { 53 syncable::Directory* dir() {
54 return dir_maker_.directory(); 54 return dir_maker_.directory();
55 } 55 }
56 protected: 56 protected:
57 scoped_ptr<sync_pb::SyncEntity> CreateUpdate( 57 scoped_ptr<sync_pb::SyncEntity> CreateUpdate(
58 const std::string& id, 58 const std::string& id,
59 const std::string& parent, 59 const std::string& parent,
60 const ModelType& type); 60 const ModelType& type);
61 61
62 // This exists mostly to give tests access to the protected member function. 62 // This exists mostly to give tests access to the protected member function.
63 // Warning: This takes the syncable directory lock. 63 // Warning: This takes the syncable directory lock.
64 void UpdateSyncEntities( 64 void UpdateSyncEntities(
65 SyncDirectoryUpdateHandler* handler, 65 DirectoryUpdateHandler* handler,
66 const SyncEntityList& applicable_updates, 66 const SyncEntityList& applicable_updates,
67 sessions::StatusController* status); 67 sessions::StatusController* status);
68 68
69 // Another function to access private member functions. 69 // Another function to access private member functions.
70 void UpdateProgressMarkers( 70 void UpdateProgressMarkers(
71 SyncDirectoryUpdateHandler* handler, 71 DirectoryUpdateHandler* handler,
72 const sync_pb::DataTypeProgressMarker& progress); 72 const sync_pb::DataTypeProgressMarker& progress);
73 73
74 scoped_refptr<FakeModelWorker> ui_worker() { 74 scoped_refptr<FakeModelWorker> ui_worker() {
75 return ui_worker_; 75 return ui_worker_;
76 } 76 }
77 77
78 private: 78 private:
79 base::MessageLoop loop_; // Needed to initialize the directory. 79 base::MessageLoop loop_; // Needed to initialize the directory.
80 TestDirectorySetterUpper dir_maker_; 80 TestDirectorySetterUpper dir_maker_;
81 scoped_refptr<FakeModelWorker> ui_worker_; 81 scoped_refptr<FakeModelWorker> ui_worker_;
82 }; 82 };
83 83
84 scoped_ptr<sync_pb::SyncEntity> 84 scoped_ptr<sync_pb::SyncEntity>
85 SyncDirectoryUpdateHandlerProcessUpdateTest::CreateUpdate( 85 DirectoryUpdateHandlerProcessUpdateTest::CreateUpdate(
86 const std::string& id, 86 const std::string& id,
87 const std::string& parent, 87 const std::string& parent,
88 const ModelType& type) { 88 const ModelType& type) {
89 scoped_ptr<sync_pb::SyncEntity> e(new sync_pb::SyncEntity()); 89 scoped_ptr<sync_pb::SyncEntity> e(new sync_pb::SyncEntity());
90 e->set_id_string(id); 90 e->set_id_string(id);
91 e->set_parent_id_string(parent); 91 e->set_parent_id_string(parent);
92 e->set_non_unique_name(id); 92 e->set_non_unique_name(id);
93 e->set_name(id); 93 e->set_name(id);
94 e->set_version(1000); 94 e->set_version(1000);
95 AddDefaultFieldValue(type, e->mutable_specifics()); 95 AddDefaultFieldValue(type, e->mutable_specifics());
96 return e.Pass(); 96 return e.Pass();
97 } 97 }
98 98
99 void SyncDirectoryUpdateHandlerProcessUpdateTest::UpdateSyncEntities( 99 void DirectoryUpdateHandlerProcessUpdateTest::UpdateSyncEntities(
100 SyncDirectoryUpdateHandler* handler, 100 DirectoryUpdateHandler* handler,
101 const SyncEntityList& applicable_updates, 101 const SyncEntityList& applicable_updates,
102 sessions::StatusController* status) { 102 sessions::StatusController* status) {
103 syncable::ModelNeutralWriteTransaction trans(FROM_HERE, UNITTEST, dir()); 103 syncable::ModelNeutralWriteTransaction trans(FROM_HERE, UNITTEST, dir());
104 handler->UpdateSyncEntities(&trans, applicable_updates, status); 104 handler->UpdateSyncEntities(&trans, applicable_updates, status);
105 } 105 }
106 106
107 void SyncDirectoryUpdateHandlerProcessUpdateTest::UpdateProgressMarkers( 107 void DirectoryUpdateHandlerProcessUpdateTest::UpdateProgressMarkers(
108 SyncDirectoryUpdateHandler* handler, 108 DirectoryUpdateHandler* handler,
109 const sync_pb::DataTypeProgressMarker& progress) { 109 const sync_pb::DataTypeProgressMarker& progress) {
110 handler->UpdateProgressMarker(progress); 110 handler->UpdateProgressMarker(progress);
111 } 111 }
112 112
113 static const char kCacheGuid[] = "IrcjZ2jyzHDV9Io4+zKcXQ=="; 113 static const char kCacheGuid[] = "IrcjZ2jyzHDV9Io4+zKcXQ==";
114 114
115 // Test that the bookmark tag is set on newly downloaded items. 115 // Test that the bookmark tag is set on newly downloaded items.
116 TEST_F(SyncDirectoryUpdateHandlerProcessUpdateTest, NewBookmarkTag) { 116 TEST_F(DirectoryUpdateHandlerProcessUpdateTest, NewBookmarkTag) {
117 SyncDirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker()); 117 DirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker());
118 sync_pb::GetUpdatesResponse gu_response; 118 sync_pb::GetUpdatesResponse gu_response;
119 sessions::StatusController status; 119 sessions::StatusController status;
120 120
121 // Add a bookmark item to the update message. 121 // Add a bookmark item to the update message.
122 std::string root = syncable::GetNullId().GetServerId(); 122 std::string root = syncable::GetNullId().GetServerId();
123 syncable::Id server_id = syncable::Id::CreateFromServerId("b1"); 123 syncable::Id server_id = syncable::Id::CreateFromServerId("b1");
124 scoped_ptr<sync_pb::SyncEntity> e = 124 scoped_ptr<sync_pb::SyncEntity> e =
125 CreateUpdate(SyncableIdToProto(server_id), root, BOOKMARKS); 125 CreateUpdate(SyncableIdToProto(server_id), root, BOOKMARKS);
126 e->set_originator_cache_guid( 126 e->set_originator_cache_guid(
127 std::string(kCacheGuid, arraysize(kCacheGuid)-1)); 127 std::string(kCacheGuid, arraysize(kCacheGuid)-1));
(...skipping 15 matching lines...) Expand all
143 EXPECT_TRUE(entry.GetServerUniquePosition().IsValid()); 143 EXPECT_TRUE(entry.GetServerUniquePosition().IsValid());
144 144
145 // If this assertion fails, that might indicate that the algorithm used to 145 // If this assertion fails, that might indicate that the algorithm used to
146 // generate bookmark tags has been modified. This could have implications for 146 // generate bookmark tags has been modified. This could have implications for
147 // bookmark ordering. Please make sure you know what you're doing if you 147 // bookmark ordering. Please make sure you know what you're doing if you
148 // intend to make such a change. 148 // intend to make such a change.
149 EXPECT_EQ("6wHRAb3kbnXV5GHrejp4/c1y5tw=", entry.GetUniqueBookmarkTag()); 149 EXPECT_EQ("6wHRAb3kbnXV5GHrejp4/c1y5tw=", entry.GetUniqueBookmarkTag());
150 } 150 }
151 151
152 // Test the receipt of a type root node. 152 // Test the receipt of a type root node.
153 TEST_F(SyncDirectoryUpdateHandlerProcessUpdateTest, 153 TEST_F(DirectoryUpdateHandlerProcessUpdateTest,
154 ReceiveServerCreatedBookmarkFolders) { 154 ReceiveServerCreatedBookmarkFolders) {
155 SyncDirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker()); 155 DirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker());
156 sync_pb::GetUpdatesResponse gu_response; 156 sync_pb::GetUpdatesResponse gu_response;
157 sessions::StatusController status; 157 sessions::StatusController status;
158 158
159 // Create an update that mimics the bookmark root. 159 // Create an update that mimics the bookmark root.
160 syncable::Id server_id = syncable::Id::CreateFromServerId("xyz"); 160 syncable::Id server_id = syncable::Id::CreateFromServerId("xyz");
161 std::string root = syncable::GetNullId().GetServerId(); 161 std::string root = syncable::GetNullId().GetServerId();
162 scoped_ptr<sync_pb::SyncEntity> e = 162 scoped_ptr<sync_pb::SyncEntity> e =
163 CreateUpdate(SyncableIdToProto(server_id), root, BOOKMARKS); 163 CreateUpdate(SyncableIdToProto(server_id), root, BOOKMARKS);
164 e->set_server_defined_unique_tag("google_chrome_bookmarks"); 164 e->set_server_defined_unique_tag("google_chrome_bookmarks");
165 e->set_folder(true); 165 e->set_folder(true);
(...skipping 12 matching lines...) Expand all
178 syncable::Entry entry(&trans, syncable::GET_BY_ID, server_id); 178 syncable::Entry entry(&trans, syncable::GET_BY_ID, server_id);
179 ASSERT_TRUE(entry.good()); 179 ASSERT_TRUE(entry.good());
180 180
181 EXPECT_FALSE(entry.ShouldMaintainPosition()); 181 EXPECT_FALSE(entry.ShouldMaintainPosition());
182 EXPECT_FALSE(entry.GetUniquePosition().IsValid()); 182 EXPECT_FALSE(entry.GetUniquePosition().IsValid());
183 EXPECT_FALSE(entry.GetServerUniquePosition().IsValid()); 183 EXPECT_FALSE(entry.GetServerUniquePosition().IsValid());
184 EXPECT_TRUE(entry.GetUniqueBookmarkTag().empty()); 184 EXPECT_TRUE(entry.GetUniqueBookmarkTag().empty());
185 } 185 }
186 186
187 // Test the receipt of a non-bookmark item. 187 // Test the receipt of a non-bookmark item.
188 TEST_F(SyncDirectoryUpdateHandlerProcessUpdateTest, ReceiveNonBookmarkItem) { 188 TEST_F(DirectoryUpdateHandlerProcessUpdateTest, ReceiveNonBookmarkItem) {
189 SyncDirectoryUpdateHandler handler(dir(), PREFERENCES, ui_worker()); 189 DirectoryUpdateHandler handler(dir(), PREFERENCES, ui_worker());
190 sync_pb::GetUpdatesResponse gu_response; 190 sync_pb::GetUpdatesResponse gu_response;
191 sessions::StatusController status; 191 sessions::StatusController status;
192 192
193 std::string root = syncable::GetNullId().GetServerId(); 193 std::string root = syncable::GetNullId().GetServerId();
194 syncable::Id server_id = syncable::Id::CreateFromServerId("xyz"); 194 syncable::Id server_id = syncable::Id::CreateFromServerId("xyz");
195 scoped_ptr<sync_pb::SyncEntity> e = 195 scoped_ptr<sync_pb::SyncEntity> e =
196 CreateUpdate(SyncableIdToProto(server_id), root, PREFERENCES); 196 CreateUpdate(SyncableIdToProto(server_id), root, PREFERENCES);
197 e->set_server_defined_unique_tag("9PGRuKdX5sHyGMB17CvYTXuC43I="); 197 e->set_server_defined_unique_tag("9PGRuKdX5sHyGMB17CvYTXuC43I=");
198 198
199 // Add it to the applicable updates list. 199 // Add it to the applicable updates list.
200 SyncEntityList autofill_updates; 200 SyncEntityList autofill_updates;
201 autofill_updates.push_back(e.get()); 201 autofill_updates.push_back(e.get());
202 202
203 EXPECT_FALSE(SyncerProtoUtil::ShouldMaintainPosition(*e)); 203 EXPECT_FALSE(SyncerProtoUtil::ShouldMaintainPosition(*e));
204 204
205 // Process it. 205 // Process it.
206 UpdateSyncEntities(&handler, autofill_updates, &status); 206 UpdateSyncEntities(&handler, autofill_updates, &status);
207 207
208 syncable::ReadTransaction trans(FROM_HERE, dir()); 208 syncable::ReadTransaction trans(FROM_HERE, dir());
209 syncable::Entry entry(&trans, syncable::GET_BY_ID, server_id); 209 syncable::Entry entry(&trans, syncable::GET_BY_ID, server_id);
210 ASSERT_TRUE(entry.good()); 210 ASSERT_TRUE(entry.good());
211 211
212 EXPECT_FALSE(entry.ShouldMaintainPosition()); 212 EXPECT_FALSE(entry.ShouldMaintainPosition());
213 EXPECT_FALSE(entry.GetUniquePosition().IsValid()); 213 EXPECT_FALSE(entry.GetUniquePosition().IsValid());
214 EXPECT_FALSE(entry.GetServerUniquePosition().IsValid()); 214 EXPECT_FALSE(entry.GetServerUniquePosition().IsValid());
215 EXPECT_TRUE(entry.GetUniqueBookmarkTag().empty()); 215 EXPECT_TRUE(entry.GetUniqueBookmarkTag().empty());
216 } 216 }
217 217
218 // Tests the setting of progress markers. 218 // Tests the setting of progress markers.
219 TEST_F(SyncDirectoryUpdateHandlerProcessUpdateTest, ProcessNewProgressMarkers) { 219 TEST_F(DirectoryUpdateHandlerProcessUpdateTest, ProcessNewProgressMarkers) {
220 SyncDirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker()); 220 DirectoryUpdateHandler handler(dir(), BOOKMARKS, ui_worker());
221 221
222 sync_pb::DataTypeProgressMarker progress; 222 sync_pb::DataTypeProgressMarker progress;
223 progress.set_data_type_id(GetSpecificsFieldNumberFromModelType(BOOKMARKS)); 223 progress.set_data_type_id(GetSpecificsFieldNumberFromModelType(BOOKMARKS));
224 progress.set_token("token"); 224 progress.set_token("token");
225 225
226 UpdateProgressMarkers(&handler, progress); 226 UpdateProgressMarkers(&handler, progress);
227 227
228 sync_pb::DataTypeProgressMarker saved; 228 sync_pb::DataTypeProgressMarker saved;
229 dir()->GetDownloadProgress(BOOKMARKS, &saved); 229 dir()->GetDownloadProgress(BOOKMARKS, &saved);
230 230
231 EXPECT_EQ(progress.token(), saved.token()); 231 EXPECT_EQ(progress.token(), saved.token());
232 EXPECT_EQ(progress.data_type_id(), saved.data_type_id()); 232 EXPECT_EQ(progress.data_type_id(), saved.data_type_id());
233 } 233 }
234 234
235 // A test harness for tests that focus on applying updates. 235 // A test harness for tests that focus on applying updates.
236 // 236 //
237 // Update application is performed when we want to take updates that were 237 // Update application is performed when we want to take updates that were
238 // previously downloaded, processed, and stored in our syncable::Directory 238 // previously downloaded, processed, and stored in our syncable::Directory
239 // and use them to update our local state (both the Directory's local state 239 // and use them to update our local state (both the Directory's local state
240 // and the model's local state, though these tests focus only on the Directory's 240 // and the model's local state, though these tests focus only on the Directory's
241 // local state). 241 // local state).
242 // 242 //
243 // This is kept separate from the update processing test in part for historical 243 // This is kept separate from the update processing test in part for historical
244 // reasons, and in part because these tests may require a bit more infrastrcture 244 // reasons, and in part because these tests may require a bit more infrastrcture
245 // in the future. Update application should happen on a different thread a lot 245 // in the future. Update application should happen on a different thread a lot
246 // of the time so these tests may end up requiring more infrastructure than the 246 // of the time so these tests may end up requiring more infrastructure than the
247 // update processing tests. Currently, we're bypassing most of those issues by 247 // update processing tests. Currently, we're bypassing most of those issues by
248 // using FakeModelWorkers, so there's not much difference between the two test 248 // using FakeModelWorkers, so there's not much difference between the two test
249 // harnesses. 249 // harnesses.
250 class SyncDirectoryUpdateHandlerApplyUpdateTest : public ::testing::Test { 250 class DirectoryUpdateHandlerApplyUpdateTest : public ::testing::Test {
251 public: 251 public:
252 SyncDirectoryUpdateHandlerApplyUpdateTest() 252 DirectoryUpdateHandlerApplyUpdateTest()
253 : ui_worker_(new FakeModelWorker(GROUP_UI)), 253 : ui_worker_(new FakeModelWorker(GROUP_UI)),
254 password_worker_(new FakeModelWorker(GROUP_PASSWORD)), 254 password_worker_(new FakeModelWorker(GROUP_PASSWORD)),
255 passive_worker_(new FakeModelWorker(GROUP_PASSIVE)), 255 passive_worker_(new FakeModelWorker(GROUP_PASSIVE)),
256 update_handler_map_deleter_(&update_handler_map_) {} 256 update_handler_map_deleter_(&update_handler_map_) {}
257 257
258 virtual void SetUp() OVERRIDE { 258 virtual void SetUp() OVERRIDE {
259 dir_maker_.SetUp(); 259 dir_maker_.SetUp();
260 entry_factory_.reset(new TestEntryFactory(directory())); 260 entry_factory_.reset(new TestEntryFactory(directory()));
261 261
262 update_handler_map_.insert(std::make_pair( 262 update_handler_map_.insert(std::make_pair(
263 BOOKMARKS, 263 BOOKMARKS,
264 new SyncDirectoryUpdateHandler(directory(), BOOKMARKS, ui_worker_))); 264 new DirectoryUpdateHandler(directory(), BOOKMARKS, ui_worker_)));
265 update_handler_map_.insert(std::make_pair( 265 update_handler_map_.insert(std::make_pair(
266 PASSWORDS, 266 PASSWORDS,
267 new SyncDirectoryUpdateHandler(directory(), 267 new DirectoryUpdateHandler(directory(),
268 PASSWORDS, 268 PASSWORDS,
269 password_worker_))); 269 password_worker_)));
270 } 270 }
271 271
272 virtual void TearDown() OVERRIDE { 272 virtual void TearDown() OVERRIDE {
273 dir_maker_.TearDown(); 273 dir_maker_.TearDown();
274 } 274 }
275 275
276 protected: 276 protected:
277 void ApplyBookmarkUpdates(sessions::StatusController* status) { 277 void ApplyBookmarkUpdates(sessions::StatusController* status) {
278 update_handler_map_[BOOKMARKS]->ApplyUpdates(status); 278 update_handler_map_[BOOKMARKS]->ApplyUpdates(status);
279 } 279 }
280 280
281 void ApplyPasswordUpdates(sessions::StatusController* status) { 281 void ApplyPasswordUpdates(sessions::StatusController* status) {
282 update_handler_map_[PASSWORDS]->ApplyUpdates(status); 282 update_handler_map_[PASSWORDS]->ApplyUpdates(status);
283 } 283 }
284 284
285 TestEntryFactory* entry_factory() { 285 TestEntryFactory* entry_factory() {
286 return entry_factory_.get(); 286 return entry_factory_.get();
287 } 287 }
288 288
289 syncable::Directory* directory() { 289 syncable::Directory* directory() {
290 return dir_maker_.directory(); 290 return dir_maker_.directory();
291 } 291 }
292 292
293 private: 293 private:
294 typedef std::map<ModelType, SyncDirectoryUpdateHandler*> UpdateHandlerMap; 294 typedef std::map<ModelType, UpdateHandler*> UpdateHandlerMap;
295 295
296 base::MessageLoop loop_; // Needed to initialize the directory. 296 base::MessageLoop loop_; // Needed to initialize the directory.
297 TestDirectorySetterUpper dir_maker_; 297 TestDirectorySetterUpper dir_maker_;
298 scoped_ptr<TestEntryFactory> entry_factory_; 298 scoped_ptr<TestEntryFactory> entry_factory_;
299 299
300 scoped_refptr<FakeModelWorker> ui_worker_; 300 scoped_refptr<FakeModelWorker> ui_worker_;
301 scoped_refptr<FakeModelWorker> password_worker_; 301 scoped_refptr<FakeModelWorker> password_worker_;
302 scoped_refptr<FakeModelWorker> passive_worker_; 302 scoped_refptr<FakeModelWorker> passive_worker_;
303 303
304 UpdateHandlerMap update_handler_map_; 304 UpdateHandlerMap update_handler_map_;
305 STLValueDeleter<UpdateHandlerMap> update_handler_map_deleter_; 305 STLValueDeleter<UpdateHandlerMap> update_handler_map_deleter_;
306 }; 306 };
307 307
308 namespace { 308 namespace {
309 sync_pb::EntitySpecifics DefaultBookmarkSpecifics() { 309 sync_pb::EntitySpecifics DefaultBookmarkSpecifics() {
310 sync_pb::EntitySpecifics result; 310 sync_pb::EntitySpecifics result;
311 AddDefaultFieldValue(BOOKMARKS, &result); 311 AddDefaultFieldValue(BOOKMARKS, &result);
312 return result; 312 return result;
313 } 313 }
314 } // namespace 314 } // namespace
315 315
316 // Test update application for a few bookmark items. 316 // Test update application for a few bookmark items.
317 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, SimpleBookmark) { 317 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, SimpleBookmark) {
318 sessions::StatusController status; 318 sessions::StatusController status;
319 319
320 std::string root_server_id = syncable::GetNullId().GetServerId(); 320 std::string root_server_id = syncable::GetNullId().GetServerId();
321 int64 parent_handle = 321 int64 parent_handle =
322 entry_factory()->CreateUnappliedNewBookmarkItemWithParent( 322 entry_factory()->CreateUnappliedNewBookmarkItemWithParent(
323 "parent", DefaultBookmarkSpecifics(), root_server_id); 323 "parent", DefaultBookmarkSpecifics(), root_server_id);
324 int64 child_handle = 324 int64 child_handle =
325 entry_factory()->CreateUnappliedNewBookmarkItemWithParent( 325 entry_factory()->CreateUnappliedNewBookmarkItemWithParent(
326 "child", DefaultBookmarkSpecifics(), "parent"); 326 "child", DefaultBookmarkSpecifics(), "parent");
327 327
(...skipping 16 matching lines...) Expand all
344 ASSERT_TRUE(child.good()); 344 ASSERT_TRUE(child.good());
345 345
346 EXPECT_FALSE(parent.GetIsUnsynced()); 346 EXPECT_FALSE(parent.GetIsUnsynced());
347 EXPECT_FALSE(parent.GetIsUnappliedUpdate()); 347 EXPECT_FALSE(parent.GetIsUnappliedUpdate());
348 EXPECT_FALSE(child.GetIsUnsynced()); 348 EXPECT_FALSE(child.GetIsUnsynced());
349 EXPECT_FALSE(child.GetIsUnappliedUpdate()); 349 EXPECT_FALSE(child.GetIsUnappliedUpdate());
350 } 350 }
351 } 351 }
352 352
353 // Test that the applicator can handle updates delivered out of order. 353 // Test that the applicator can handle updates delivered out of order.
354 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, 354 TEST_F(DirectoryUpdateHandlerApplyUpdateTest,
355 BookmarkChildrenBeforeParent) { 355 BookmarkChildrenBeforeParent) {
356 // Start with some bookmarks whose parents are unknown. 356 // Start with some bookmarks whose parents are unknown.
357 std::string root_server_id = syncable::GetNullId().GetServerId(); 357 std::string root_server_id = syncable::GetNullId().GetServerId();
358 int64 a_handle = entry_factory()->CreateUnappliedNewBookmarkItemWithParent( 358 int64 a_handle = entry_factory()->CreateUnappliedNewBookmarkItemWithParent(
359 "a_child_created_first", DefaultBookmarkSpecifics(), "parent"); 359 "a_child_created_first", DefaultBookmarkSpecifics(), "parent");
360 int64 x_handle = entry_factory()->CreateUnappliedNewBookmarkItemWithParent( 360 int64 x_handle = entry_factory()->CreateUnappliedNewBookmarkItemWithParent(
361 "x_child_created_first", DefaultBookmarkSpecifics(), "parent"); 361 "x_child_created_first", DefaultBookmarkSpecifics(), "parent");
362 362
363 // Update application will fail. 363 // Update application will fail.
364 sessions::StatusController status1; 364 sessions::StatusController status1;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 ASSERT_TRUE(a.good()); 402 ASSERT_TRUE(a.good());
403 ASSERT_TRUE(x.good()); 403 ASSERT_TRUE(x.good());
404 404
405 EXPECT_FALSE(a.GetIsUnappliedUpdate()); 405 EXPECT_FALSE(a.GetIsUnappliedUpdate());
406 EXPECT_FALSE(x.GetIsUnappliedUpdate()); 406 EXPECT_FALSE(x.GetIsUnappliedUpdate());
407 } 407 }
408 } 408 }
409 409
410 // Try to apply changes on an item that is both IS_UNSYNCED and 410 // Try to apply changes on an item that is both IS_UNSYNCED and
411 // IS_UNAPPLIED_UPDATE. Conflict resolution should be performed. 411 // IS_UNAPPLIED_UPDATE. Conflict resolution should be performed.
412 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, SimpleBookmarkConflict) { 412 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, SimpleBookmarkConflict) {
413 int64 handle = entry_factory()->CreateUnappliedAndUnsyncedBookmarkItem("x"); 413 int64 handle = entry_factory()->CreateUnappliedAndUnsyncedBookmarkItem("x");
414 414
415 int original_server_version = -10; 415 int original_server_version = -10;
416 { 416 {
417 syncable::ReadTransaction trans(FROM_HERE, directory()); 417 syncable::ReadTransaction trans(FROM_HERE, directory());
418 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle); 418 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle);
419 original_server_version = e.GetServerVersion(); 419 original_server_version = e.GetServerVersion();
420 ASSERT_NE(original_server_version, e.GetBaseVersion()); 420 ASSERT_NE(original_server_version, e.GetBaseVersion());
421 EXPECT_TRUE(e.GetIsUnsynced()); 421 EXPECT_TRUE(e.GetIsUnsynced());
422 } 422 }
(...skipping 15 matching lines...) Expand all
438 438
439 // The unsynced flag will remain set until we successfully commit the item. 439 // The unsynced flag will remain set until we successfully commit the item.
440 EXPECT_TRUE(e.GetIsUnsynced()); 440 EXPECT_TRUE(e.GetIsUnsynced());
441 } 441 }
442 } 442 }
443 443
444 // Create a simple conflict that is also a hierarchy conflict. If we were to 444 // Create a simple conflict that is also a hierarchy conflict. If we were to
445 // follow the normal "server wins" logic, we'd end up violating hierarchy 445 // follow the normal "server wins" logic, we'd end up violating hierarchy
446 // constraints. The hierarchy conflict must take precedence. We can not allow 446 // constraints. The hierarchy conflict must take precedence. We can not allow
447 // the update to be applied. The item must remain in the conflict state. 447 // the update to be applied. The item must remain in the conflict state.
448 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, HierarchyAndSimpleConflict) { 448 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, HierarchyAndSimpleConflict) {
449 // Create a simply-conflicting item. It will start with valid parent ids. 449 // Create a simply-conflicting item. It will start with valid parent ids.
450 int64 handle = entry_factory()->CreateUnappliedAndUnsyncedBookmarkItem( 450 int64 handle = entry_factory()->CreateUnappliedAndUnsyncedBookmarkItem(
451 "orphaned_by_server"); 451 "orphaned_by_server");
452 { 452 {
453 // Manually set the SERVER_PARENT_ID to bad value. 453 // Manually set the SERVER_PARENT_ID to bad value.
454 // A bad parent indicates a hierarchy conflict. 454 // A bad parent indicates a hierarchy conflict.
455 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 455 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory());
456 syncable::MutableEntry entry(&trans, syncable::GET_BY_HANDLE, handle); 456 syncable::MutableEntry entry(&trans, syncable::GET_BY_HANDLE, handle);
457 ASSERT_TRUE(entry.good()); 457 ASSERT_TRUE(entry.good());
458 458
(...skipping 10 matching lines...) Expand all
469 syncable::ReadTransaction trans(FROM_HERE, directory()); 469 syncable::ReadTransaction trans(FROM_HERE, directory());
470 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle); 470 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle);
471 ASSERT_TRUE(e.good()); 471 ASSERT_TRUE(e.good());
472 EXPECT_TRUE(e.GetIsUnappliedUpdate()); 472 EXPECT_TRUE(e.GetIsUnappliedUpdate());
473 EXPECT_TRUE(e.GetIsUnsynced()); 473 EXPECT_TRUE(e.GetIsUnsynced());
474 } 474 }
475 } 475 }
476 476
477 // Attempt to apply an udpate that would create a bookmark folder loop. This 477 // Attempt to apply an udpate that would create a bookmark folder loop. This
478 // application should fail. 478 // application should fail.
479 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, BookmarkFolderLoop) { 479 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, BookmarkFolderLoop) {
480 // Item 'X' locally has parent of 'root'. Server is updating it to have 480 // Item 'X' locally has parent of 'root'. Server is updating it to have
481 // parent of 'Y'. 481 // parent of 'Y'.
482 482
483 // Create it as a child of root node. 483 // Create it as a child of root node.
484 int64 handle = entry_factory()->CreateSyncedItem("X", BOOKMARKS, true); 484 int64 handle = entry_factory()->CreateSyncedItem("X", BOOKMARKS, true);
485 485
486 { 486 {
487 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 487 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory());
488 syncable::MutableEntry entry(&trans, syncable::GET_BY_HANDLE, handle); 488 syncable::MutableEntry entry(&trans, syncable::GET_BY_HANDLE, handle);
489 ASSERT_TRUE(entry.good()); 489 ASSERT_TRUE(entry.good());
(...skipping 24 matching lines...) Expand all
514 syncable::ReadTransaction trans(FROM_HERE, directory()); 514 syncable::ReadTransaction trans(FROM_HERE, directory());
515 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle); 515 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle);
516 ASSERT_TRUE(e.good()); 516 ASSERT_TRUE(e.good());
517 EXPECT_TRUE(e.GetIsUnappliedUpdate()); 517 EXPECT_TRUE(e.GetIsUnappliedUpdate());
518 EXPECT_FALSE(e.GetIsUnsynced()); 518 EXPECT_FALSE(e.GetIsUnsynced());
519 } 519 }
520 } 520 }
521 521
522 // Test update application where the update has been orphaned by a local folder 522 // Test update application where the update has been orphaned by a local folder
523 // deletion. The update application attempt should fail. 523 // deletion. The update application attempt should fail.
524 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, 524 TEST_F(DirectoryUpdateHandlerApplyUpdateTest,
525 HierarchyConflictDeletedParent) { 525 HierarchyConflictDeletedParent) {
526 // Create a locally deleted parent item. 526 // Create a locally deleted parent item.
527 int64 parent_handle; 527 int64 parent_handle;
528 entry_factory()->CreateUnsyncedItem( 528 entry_factory()->CreateUnsyncedItem(
529 syncable::Id::CreateFromServerId("parent"), TestIdFactory::root(), 529 syncable::Id::CreateFromServerId("parent"), TestIdFactory::root(),
530 "parent", true, BOOKMARKS, &parent_handle); 530 "parent", true, BOOKMARKS, &parent_handle);
531 { 531 {
532 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 532 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory());
533 syncable::MutableEntry entry(&trans, 533 syncable::MutableEntry entry(&trans,
534 syncable::GET_BY_HANDLE, 534 syncable::GET_BY_HANDLE,
(...skipping 17 matching lines...) Expand all
552 syncable::ReadTransaction trans(FROM_HERE, directory()); 552 syncable::ReadTransaction trans(FROM_HERE, directory());
553 syncable::Entry child(&trans, syncable::GET_BY_HANDLE, child_handle); 553 syncable::Entry child(&trans, syncable::GET_BY_HANDLE, child_handle);
554 ASSERT_TRUE(child.good()); 554 ASSERT_TRUE(child.good());
555 EXPECT_TRUE(child.GetIsUnappliedUpdate()); 555 EXPECT_TRUE(child.GetIsUnappliedUpdate());
556 EXPECT_FALSE(child.GetIsUnsynced()); 556 EXPECT_FALSE(child.GetIsUnsynced());
557 } 557 }
558 } 558 }
559 559
560 // Attempt to apply an update that deletes a folder where the folder has 560 // Attempt to apply an update that deletes a folder where the folder has
561 // locally-created children. The update application should fail. 561 // locally-created children. The update application should fail.
562 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, 562 TEST_F(DirectoryUpdateHandlerApplyUpdateTest,
563 HierarchyConflictDeleteNonEmptyDirectory) { 563 HierarchyConflictDeleteNonEmptyDirectory) {
564 // Create a server-deleted folder as a child of root node. 564 // Create a server-deleted folder as a child of root node.
565 int64 parent_handle = 565 int64 parent_handle =
566 entry_factory()->CreateSyncedItem("parent", BOOKMARKS, true); 566 entry_factory()->CreateSyncedItem("parent", BOOKMARKS, true);
567 { 567 {
568 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 568 syncable::WriteTransaction trans(FROM_HERE, UNITTEST, directory());
569 syncable::MutableEntry entry(&trans, 569 syncable::MutableEntry entry(&trans,
570 syncable::GET_BY_HANDLE, 570 syncable::GET_BY_HANDLE,
571 parent_handle); 571 parent_handle);
572 ASSERT_TRUE(entry.good()); 572 ASSERT_TRUE(entry.good());
(...skipping 23 matching lines...) Expand all
596 syncable::ReadTransaction trans(FROM_HERE, directory()); 596 syncable::ReadTransaction trans(FROM_HERE, directory());
597 syncable::Entry parent(&trans, syncable::GET_BY_HANDLE, parent_handle); 597 syncable::Entry parent(&trans, syncable::GET_BY_HANDLE, parent_handle);
598 ASSERT_TRUE(parent.good()); 598 ASSERT_TRUE(parent.good());
599 EXPECT_TRUE(parent.GetIsUnappliedUpdate()); 599 EXPECT_TRUE(parent.GetIsUnappliedUpdate());
600 EXPECT_FALSE(parent.GetIsUnsynced()); 600 EXPECT_FALSE(parent.GetIsUnsynced());
601 } 601 }
602 } 602 }
603 603
604 // Attempt to apply updates where the updated item's parent is not known to this 604 // Attempt to apply updates where the updated item's parent is not known to this
605 // client. The update application attempt should fail. 605 // client. The update application attempt should fail.
606 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, 606 TEST_F(DirectoryUpdateHandlerApplyUpdateTest,
607 HierarchyConflictUnknownParent) { 607 HierarchyConflictUnknownParent) {
608 // We shouldn't be able to do anything with either of these items. 608 // We shouldn't be able to do anything with either of these items.
609 int64 x_handle = entry_factory()->CreateUnappliedNewItemWithParent( 609 int64 x_handle = entry_factory()->CreateUnappliedNewItemWithParent(
610 "some_item", DefaultBookmarkSpecifics(), "unknown_parent"); 610 "some_item", DefaultBookmarkSpecifics(), "unknown_parent");
611 int64 y_handle = entry_factory()->CreateUnappliedNewItemWithParent( 611 int64 y_handle = entry_factory()->CreateUnappliedNewItemWithParent(
612 "some_other_item", DefaultBookmarkSpecifics(), "some_item"); 612 "some_other_item", DefaultBookmarkSpecifics(), "some_item");
613 613
614 sessions::StatusController status; 614 sessions::StatusController status;
615 ApplyBookmarkUpdates(&status); 615 ApplyBookmarkUpdates(&status);
616 616
(...skipping 10 matching lines...) Expand all
627 ASSERT_TRUE(y.good()); 627 ASSERT_TRUE(y.good());
628 EXPECT_TRUE(x.GetIsUnappliedUpdate()); 628 EXPECT_TRUE(x.GetIsUnappliedUpdate());
629 EXPECT_TRUE(y.GetIsUnappliedUpdate()); 629 EXPECT_TRUE(y.GetIsUnappliedUpdate());
630 EXPECT_FALSE(x.GetIsUnsynced()); 630 EXPECT_FALSE(x.GetIsUnsynced());
631 EXPECT_FALSE(y.GetIsUnsynced()); 631 EXPECT_FALSE(y.GetIsUnsynced());
632 } 632 }
633 } 633 }
634 634
635 // Attempt application of a mix of items. Some update application attempts will 635 // Attempt application of a mix of items. Some update application attempts will
636 // fail due to hierarchy conflicts. Others should succeed. 636 // fail due to hierarchy conflicts. Others should succeed.
637 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, ItemsBothKnownAndUnknown) { 637 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, ItemsBothKnownAndUnknown) {
638 // See what happens when there's a mixture of good and bad updates. 638 // See what happens when there's a mixture of good and bad updates.
639 std::string root_server_id = syncable::GetNullId().GetServerId(); 639 std::string root_server_id = syncable::GetNullId().GetServerId();
640 int64 u1_handle = entry_factory()->CreateUnappliedNewItemWithParent( 640 int64 u1_handle = entry_factory()->CreateUnappliedNewItemWithParent(
641 "first_unknown_item", DefaultBookmarkSpecifics(), "unknown_parent"); 641 "first_unknown_item", DefaultBookmarkSpecifics(), "unknown_parent");
642 int64 k1_handle = entry_factory()->CreateUnappliedNewItemWithParent( 642 int64 k1_handle = entry_factory()->CreateUnappliedNewItemWithParent(
643 "first_known_item", DefaultBookmarkSpecifics(), root_server_id); 643 "first_known_item", DefaultBookmarkSpecifics(), root_server_id);
644 int64 u2_handle = entry_factory()->CreateUnappliedNewItemWithParent( 644 int64 u2_handle = entry_factory()->CreateUnappliedNewItemWithParent(
645 "second_unknown_item", DefaultBookmarkSpecifics(), "unknown_parent"); 645 "second_unknown_item", DefaultBookmarkSpecifics(), "unknown_parent");
646 int64 k2_handle = entry_factory()->CreateUnappliedNewItemWithParent( 646 int64 k2_handle = entry_factory()->CreateUnappliedNewItemWithParent(
647 "second_known_item", DefaultBookmarkSpecifics(), "first_known_item"); 647 "second_known_item", DefaultBookmarkSpecifics(), "first_known_item");
(...skipping 27 matching lines...) Expand all
675 EXPECT_TRUE(u1.GetIsUnappliedUpdate()); 675 EXPECT_TRUE(u1.GetIsUnappliedUpdate());
676 EXPECT_TRUE(u2.GetIsUnappliedUpdate()); 676 EXPECT_TRUE(u2.GetIsUnappliedUpdate());
677 EXPECT_FALSE(k1.GetIsUnappliedUpdate()); 677 EXPECT_FALSE(k1.GetIsUnappliedUpdate());
678 EXPECT_FALSE(k2.GetIsUnappliedUpdate()); 678 EXPECT_FALSE(k2.GetIsUnappliedUpdate());
679 EXPECT_FALSE(k3.GetIsUnappliedUpdate()); 679 EXPECT_FALSE(k3.GetIsUnappliedUpdate());
680 EXPECT_FALSE(k4.GetIsUnappliedUpdate()); 680 EXPECT_FALSE(k4.GetIsUnappliedUpdate());
681 } 681 }
682 } 682 }
683 683
684 // Attempt application of password upates where the passphrase is known. 684 // Attempt application of password upates where the passphrase is known.
685 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, DecryptablePassword) { 685 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, DecryptablePassword) {
686 // Decryptable password updates should be applied. 686 // Decryptable password updates should be applied.
687 Cryptographer* cryptographer; 687 Cryptographer* cryptographer;
688 { 688 {
689 // Storing the cryptographer separately is bad, but for this test we 689 // Storing the cryptographer separately is bad, but for this test we
690 // know it's safe. 690 // know it's safe.
691 syncable::ReadTransaction trans(FROM_HERE, directory()); 691 syncable::ReadTransaction trans(FROM_HERE, directory());
692 cryptographer = directory()->GetCryptographer(&trans); 692 cryptographer = directory()->GetCryptographer(&trans);
693 } 693 }
694 694
695 KeyParams params = {"localhost", "dummy", "foobar"}; 695 KeyParams params = {"localhost", "dummy", "foobar"};
(...skipping 17 matching lines...) Expand all
713 { 713 {
714 syncable::ReadTransaction trans(FROM_HERE, directory()); 714 syncable::ReadTransaction trans(FROM_HERE, directory());
715 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle); 715 syncable::Entry e(&trans, syncable::GET_BY_HANDLE, handle);
716 ASSERT_TRUE(e.good()); 716 ASSERT_TRUE(e.good());
717 EXPECT_FALSE(e.GetIsUnappliedUpdate()); 717 EXPECT_FALSE(e.GetIsUnappliedUpdate());
718 EXPECT_FALSE(e.GetIsUnsynced()); 718 EXPECT_FALSE(e.GetIsUnsynced());
719 } 719 }
720 } 720 }
721 721
722 // Attempt application of encrypted items when the passphrase is not known. 722 // Attempt application of encrypted items when the passphrase is not known.
723 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, UndecryptableData) { 723 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, UndecryptableData) {
724 // Undecryptable updates should not be applied. 724 // Undecryptable updates should not be applied.
725 sync_pb::EntitySpecifics encrypted_bookmark; 725 sync_pb::EntitySpecifics encrypted_bookmark;
726 encrypted_bookmark.mutable_encrypted(); 726 encrypted_bookmark.mutable_encrypted();
727 AddDefaultFieldValue(BOOKMARKS, &encrypted_bookmark); 727 AddDefaultFieldValue(BOOKMARKS, &encrypted_bookmark);
728 std::string root_server_id = syncable::GetNullId().GetServerId(); 728 std::string root_server_id = syncable::GetNullId().GetServerId();
729 int64 folder_handle = entry_factory()->CreateUnappliedNewItemWithParent( 729 int64 folder_handle = entry_factory()->CreateUnappliedNewItemWithParent(
730 "folder", 730 "folder",
731 encrypted_bookmark, 731 encrypted_bookmark,
732 root_server_id); 732 root_server_id);
733 int64 bookmark_handle = entry_factory()->CreateUnappliedNewItem( 733 int64 bookmark_handle = entry_factory()->CreateUnappliedNewItem(
(...skipping 24 matching lines...) Expand all
758 ASSERT_TRUE(folder.good()); 758 ASSERT_TRUE(folder.good());
759 ASSERT_TRUE(bm.good()); 759 ASSERT_TRUE(bm.good());
760 ASSERT_TRUE(pw.good()); 760 ASSERT_TRUE(pw.good());
761 EXPECT_TRUE(folder.GetIsUnappliedUpdate()); 761 EXPECT_TRUE(folder.GetIsUnappliedUpdate());
762 EXPECT_TRUE(bm.GetIsUnappliedUpdate()); 762 EXPECT_TRUE(bm.GetIsUnappliedUpdate());
763 EXPECT_TRUE(pw.GetIsUnappliedUpdate()); 763 EXPECT_TRUE(pw.GetIsUnappliedUpdate());
764 } 764 }
765 } 765 }
766 766
767 // Test a mix of decryptable and undecryptable updates. 767 // Test a mix of decryptable and undecryptable updates.
768 TEST_F(SyncDirectoryUpdateHandlerApplyUpdateTest, SomeUndecryptablePassword) { 768 TEST_F(DirectoryUpdateHandlerApplyUpdateTest, SomeUndecryptablePassword) {
769 Cryptographer* cryptographer; 769 Cryptographer* cryptographer;
770 770
771 int64 decryptable_handle = -1; 771 int64 decryptable_handle = -1;
772 int64 undecryptable_handle = -1; 772 int64 undecryptable_handle = -1;
773 773
774 // Only decryptable password updates should be applied. 774 // Only decryptable password updates should be applied.
775 { 775 {
776 sync_pb::EntitySpecifics specifics; 776 sync_pb::EntitySpecifics specifics;
777 sync_pb::PasswordSpecificsData data; 777 sync_pb::PasswordSpecificsData data;
778 data.set_origin("http://example.com/1"); 778 data.set_origin("http://example.com/1");
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 syncable::Entry e1(&trans, syncable::GET_BY_HANDLE, decryptable_handle); 819 syncable::Entry e1(&trans, syncable::GET_BY_HANDLE, decryptable_handle);
820 syncable::Entry e2(&trans, syncable::GET_BY_HANDLE, undecryptable_handle); 820 syncable::Entry e2(&trans, syncable::GET_BY_HANDLE, undecryptable_handle);
821 ASSERT_TRUE(e1.good()); 821 ASSERT_TRUE(e1.good());
822 ASSERT_TRUE(e2.good()); 822 ASSERT_TRUE(e2.good());
823 EXPECT_FALSE(e1.GetIsUnappliedUpdate()); 823 EXPECT_FALSE(e1.GetIsUnappliedUpdate());
824 EXPECT_TRUE(e2.GetIsUnappliedUpdate()); 824 EXPECT_TRUE(e2.GetIsUnappliedUpdate());
825 } 825 }
826 } 826 }
827 827
828 } // namespace syncer 828 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/directory_update_handler.cc ('k') | sync/engine/download_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698