OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/sessions/sync_session.h" | 5 #include "sync/sessions/sync_session.h" |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
11 #include "sync/engine/conflict_resolver.h" | 11 #include "sync/engine/conflict_resolver.h" |
12 #include "sync/engine/syncer_types.h" | 12 #include "sync/engine/syncer_types.h" |
13 #include "sync/engine/throttled_data_type_tracker.h" | 13 #include "sync/engine/throttled_data_type_tracker.h" |
14 #include "sync/internal_api/public/base/model_type.h" | 14 #include "sync/internal_api/public/base/model_type.h" |
| 15 #include "sync/internal_api/public/base/model_type_state_map_test_util.h" |
15 #include "sync/sessions/session_state.h" | 16 #include "sync/sessions/session_state.h" |
16 #include "sync/sessions/status_controller.h" | 17 #include "sync/sessions/status_controller.h" |
17 #include "sync/syncable/syncable_id.h" | 18 #include "sync/syncable/syncable_id.h" |
18 #include "sync/syncable/write_transaction.h" | 19 #include "sync/syncable/write_transaction.h" |
19 #include "sync/test/engine/fake_model_worker.h" | 20 #include "sync/test/engine/fake_model_worker.h" |
20 #include "sync/test/engine/test_directory_setter_upper.h" | 21 #include "sync/test/engine/test_directory_setter_upper.h" |
21 #include "sync/test/fake_extensions_activity_monitor.h" | 22 #include "sync/test/fake_extensions_activity_monitor.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 23 #include "testing/gtest/include/gtest/gtest.h" |
23 | 24 |
24 namespace syncer { | 25 namespace syncer { |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 session_->PrepareForAnotherSyncCycle(); | 266 session_->PrepareForAnotherSyncCycle(); |
266 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION, | 267 EXPECT_EQ(sync_pb::GetUpdatesCallerInfo::SYNC_CYCLE_CONTINUATION, |
267 session_->source().updates_source); | 268 session_->source().updates_source); |
268 EXPECT_FALSE(status()->conflicts_resolved()); | 269 EXPECT_FALSE(status()->conflicts_resolved()); |
269 EXPECT_FALSE(session_->HasMoreToSync()); | 270 EXPECT_FALSE(session_->HasMoreToSync()); |
270 } | 271 } |
271 | 272 |
272 TEST_F(SyncSessionTest, Coalesce) { | 273 TEST_F(SyncSessionTest, Coalesce) { |
273 std::vector<ModelSafeWorker*> workers_one, workers_two; | 274 std::vector<ModelSafeWorker*> workers_one, workers_two; |
274 ModelSafeRoutingInfo routes_one, routes_two; | 275 ModelSafeRoutingInfo routes_one, routes_two; |
275 ModelTypePayloadMap one_type = | 276 ModelTypeStateMap one_type = |
276 ModelTypePayloadMapFromEnumSet( | 277 ModelTypeSetToStateMap( |
277 ParamsMeaningJustOneEnabledType(), | 278 ParamsMeaningJustOneEnabledType(), |
278 std::string()); | 279 std::string()); |
279 ModelTypePayloadMap all_types = | 280 ModelTypeStateMap all_types = |
280 ModelTypePayloadMapFromEnumSet( | 281 ModelTypeSetToStateMap( |
281 ParamsMeaningAllEnabledTypes(), | 282 ParamsMeaningAllEnabledTypes(), |
282 std::string()); | 283 std::string()); |
283 SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type); | 284 SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type); |
284 SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types); | 285 SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types); |
285 | 286 |
286 scoped_refptr<ModelSafeWorker> passive_worker( | 287 scoped_refptr<ModelSafeWorker> passive_worker( |
287 new FakeModelWorker(GROUP_PASSIVE)); | 288 new FakeModelWorker(GROUP_PASSIVE)); |
288 scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB)); | 289 scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB)); |
289 scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI)); | 290 scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI)); |
290 workers_one.push_back(passive_worker); | 291 workers_one.push_back(passive_worker); |
(...skipping 18 matching lines...) Expand all Loading... |
309 | 310 |
310 EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups()); | 311 EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups()); |
311 EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups()); | 312 EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups()); |
312 | 313 |
313 one.Coalesce(two); | 314 one.Coalesce(two); |
314 | 315 |
315 EXPECT_EQ(expected_enabled_groups_two, one.GetEnabledGroups()); | 316 EXPECT_EQ(expected_enabled_groups_two, one.GetEnabledGroups()); |
316 EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups()); | 317 EXPECT_EQ(expected_enabled_groups_two, two.GetEnabledGroups()); |
317 | 318 |
318 EXPECT_EQ(two.source().updates_source, one.source().updates_source); | 319 EXPECT_EQ(two.source().updates_source, one.source().updates_source); |
319 EXPECT_EQ(all_types, one.source().types); | 320 EXPECT_THAT(all_types, Eq(one.source().types)); |
320 std::vector<ModelSafeWorker*>::const_iterator it_db = | 321 std::vector<ModelSafeWorker*>::const_iterator it_db = |
321 std::find(one.workers().begin(), one.workers().end(), db_worker); | 322 std::find(one.workers().begin(), one.workers().end(), db_worker); |
322 std::vector<ModelSafeWorker*>::const_iterator it_ui = | 323 std::vector<ModelSafeWorker*>::const_iterator it_ui = |
323 std::find(one.workers().begin(), one.workers().end(), ui_worker); | 324 std::find(one.workers().begin(), one.workers().end(), ui_worker); |
324 EXPECT_NE(it_db, one.workers().end()); | 325 EXPECT_NE(it_db, one.workers().end()); |
325 EXPECT_NE(it_ui, one.workers().end()); | 326 EXPECT_NE(it_ui, one.workers().end()); |
326 EXPECT_EQ(routes_two, one.routing_info()); | 327 EXPECT_EQ(routes_two, one.routing_info()); |
327 } | 328 } |
328 | 329 |
329 TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestRemoveOneType) { | 330 TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestRemoveOneType) { |
330 std::vector<ModelSafeWorker*> workers_one, workers_two; | 331 std::vector<ModelSafeWorker*> workers_one, workers_two; |
331 ModelSafeRoutingInfo routes_one, routes_two; | 332 ModelSafeRoutingInfo routes_one, routes_two; |
332 ModelTypePayloadMap one_type = | 333 ModelTypeStateMap one_type = |
333 ModelTypePayloadMapFromEnumSet( | 334 ModelTypeSetToStateMap( |
334 ParamsMeaningJustOneEnabledType(), | 335 ParamsMeaningJustOneEnabledType(), |
335 std::string()); | 336 std::string()); |
336 ModelTypePayloadMap all_types = | 337 ModelTypeStateMap all_types = |
337 ModelTypePayloadMapFromEnumSet( | 338 ModelTypeSetToStateMap( |
338 ParamsMeaningAllEnabledTypes(), | 339 ParamsMeaningAllEnabledTypes(), |
339 std::string()); | 340 std::string()); |
340 SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type); | 341 SyncSourceInfo source_one(sync_pb::GetUpdatesCallerInfo::PERIODIC, one_type); |
341 SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types); | 342 SyncSourceInfo source_two(sync_pb::GetUpdatesCallerInfo::LOCAL, all_types); |
342 | 343 |
343 scoped_refptr<ModelSafeWorker> passive_worker( | 344 scoped_refptr<ModelSafeWorker> passive_worker( |
344 new FakeModelWorker(GROUP_PASSIVE)); | 345 new FakeModelWorker(GROUP_PASSIVE)); |
345 scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB)); | 346 scoped_refptr<ModelSafeWorker> db_worker(new FakeModelWorker(GROUP_DB)); |
346 scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI)); | 347 scoped_refptr<ModelSafeWorker> ui_worker(new FakeModelWorker(GROUP_UI)); |
347 workers_one.push_back(passive_worker); | 348 workers_one.push_back(passive_worker); |
(...skipping 22 matching lines...) Expand all Loading... |
370 two.RebaseRoutingInfoWithLatest(one); | 371 two.RebaseRoutingInfoWithLatest(one); |
371 | 372 |
372 EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups()); | 373 EXPECT_EQ(expected_enabled_groups_one, one.GetEnabledGroups()); |
373 EXPECT_EQ(expected_enabled_groups_one, two.GetEnabledGroups()); | 374 EXPECT_EQ(expected_enabled_groups_one, two.GetEnabledGroups()); |
374 | 375 |
375 // Make sure the source has not been touched. | 376 // Make sure the source has not been touched. |
376 EXPECT_EQ(two.source().updates_source, | 377 EXPECT_EQ(two.source().updates_source, |
377 sync_pb::GetUpdatesCallerInfo::LOCAL); | 378 sync_pb::GetUpdatesCallerInfo::LOCAL); |
378 | 379 |
379 // Make sure the payload is reduced to one. | 380 // Make sure the payload is reduced to one. |
380 EXPECT_EQ(one_type, two.source().types); | 381 EXPECT_THAT(one_type, Eq(two.source().types)); |
381 | 382 |
382 // Make sure the workers are udpated. | 383 // Make sure the workers are udpated. |
383 std::vector<ModelSafeWorker*>::const_iterator it_db = | 384 std::vector<ModelSafeWorker*>::const_iterator it_db = |
384 std::find(two.workers().begin(), two.workers().end(), db_worker); | 385 std::find(two.workers().begin(), two.workers().end(), db_worker); |
385 std::vector<ModelSafeWorker*>::const_iterator it_ui = | 386 std::vector<ModelSafeWorker*>::const_iterator it_ui = |
386 std::find(two.workers().begin(), two.workers().end(), ui_worker); | 387 std::find(two.workers().begin(), two.workers().end(), ui_worker); |
387 EXPECT_NE(it_db, two.workers().end()); | 388 EXPECT_NE(it_db, two.workers().end()); |
388 EXPECT_EQ(it_ui, two.workers().end()); | 389 EXPECT_EQ(it_ui, two.workers().end()); |
389 EXPECT_EQ(two.workers().size(), 2U); | 390 EXPECT_EQ(two.workers().size(), 2U); |
390 | 391 |
391 // Make sure the model safe routing info is reduced to one type. | 392 // Make sure the model safe routing info is reduced to one type. |
392 ModelSafeRoutingInfo::const_iterator it = | 393 ModelSafeRoutingInfo::const_iterator it = |
393 two.routing_info().find(AUTOFILL); | 394 two.routing_info().find(AUTOFILL); |
394 // Note that attempting to use EXPECT_NE would fail for an Android build due | 395 // Note that attempting to use EXPECT_NE would fail for an Android build due |
395 // to seeming incompatibility with gtest and stlport. | 396 // to seeming incompatibility with gtest and stlport. |
396 EXPECT_TRUE(it != two.routing_info().end()); | 397 EXPECT_TRUE(it != two.routing_info().end()); |
397 EXPECT_EQ(it->second, GROUP_DB); | 398 EXPECT_EQ(it->second, GROUP_DB); |
398 EXPECT_EQ(two.routing_info().size(), 1U); | 399 EXPECT_EQ(two.routing_info().size(), 1U); |
399 } | 400 } |
400 | 401 |
401 TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) { | 402 TEST_F(SyncSessionTest, RebaseRoutingInfoWithLatestWithSameType) { |
402 std::vector<ModelSafeWorker*> workers_first, workers_second; | 403 std::vector<ModelSafeWorker*> workers_first, workers_second; |
403 ModelSafeRoutingInfo routes_first, routes_second; | 404 ModelSafeRoutingInfo routes_first, routes_second; |
404 ModelTypePayloadMap all_types = | 405 ModelTypeStateMap all_types = |
405 ModelTypePayloadMapFromEnumSet( | 406 ModelTypeSetToStateMap( |
406 ParamsMeaningAllEnabledTypes(), | 407 ParamsMeaningAllEnabledTypes(), |
407 std::string()); | 408 std::string()); |
408 SyncSourceInfo source_first(sync_pb::GetUpdatesCallerInfo::PERIODIC, | 409 SyncSourceInfo source_first(sync_pb::GetUpdatesCallerInfo::PERIODIC, |
409 all_types); | 410 all_types); |
410 SyncSourceInfo source_second(sync_pb::GetUpdatesCallerInfo::LOCAL, | 411 SyncSourceInfo source_second(sync_pb::GetUpdatesCallerInfo::LOCAL, |
411 all_types); | 412 all_types); |
412 | 413 |
413 scoped_refptr<ModelSafeWorker> passive_worker( | 414 scoped_refptr<ModelSafeWorker> passive_worker( |
414 new FakeModelWorker(GROUP_PASSIVE)); | 415 new FakeModelWorker(GROUP_PASSIVE)); |
415 scoped_refptr<FakeModelWorker> db_worker(new FakeModelWorker(GROUP_DB)); | 416 scoped_refptr<FakeModelWorker> db_worker(new FakeModelWorker(GROUP_DB)); |
(...skipping 24 matching lines...) Expand all Loading... |
440 second.RebaseRoutingInfoWithLatest(first); | 441 second.RebaseRoutingInfoWithLatest(first); |
441 | 442 |
442 EXPECT_EQ(expected_enabled_groups, first.GetEnabledGroups()); | 443 EXPECT_EQ(expected_enabled_groups, first.GetEnabledGroups()); |
443 EXPECT_EQ(expected_enabled_groups, second.GetEnabledGroups()); | 444 EXPECT_EQ(expected_enabled_groups, second.GetEnabledGroups()); |
444 | 445 |
445 // Make sure the source has not been touched. | 446 // Make sure the source has not been touched. |
446 EXPECT_EQ(second.source().updates_source, | 447 EXPECT_EQ(second.source().updates_source, |
447 sync_pb::GetUpdatesCallerInfo::LOCAL); | 448 sync_pb::GetUpdatesCallerInfo::LOCAL); |
448 | 449 |
449 // Make sure our payload is still the same. | 450 // Make sure our payload is still the same. |
450 EXPECT_EQ(all_types, second.source().types); | 451 EXPECT_THAT(all_types, Eq(second.source().types)); |
451 | 452 |
452 // Make sure the workers are still the same. | 453 // Make sure the workers are still the same. |
453 std::vector<ModelSafeWorker*>::const_iterator it_passive = | 454 std::vector<ModelSafeWorker*>::const_iterator it_passive = |
454 std::find(second.workers().begin(), second.workers().end(), | 455 std::find(second.workers().begin(), second.workers().end(), |
455 passive_worker); | 456 passive_worker); |
456 std::vector<ModelSafeWorker*>::const_iterator it_db = | 457 std::vector<ModelSafeWorker*>::const_iterator it_db = |
457 std::find(second.workers().begin(), second.workers().end(), db_worker); | 458 std::find(second.workers().begin(), second.workers().end(), db_worker); |
458 std::vector<ModelSafeWorker*>::const_iterator it_ui = | 459 std::vector<ModelSafeWorker*>::const_iterator it_ui = |
459 std::find(second.workers().begin(), second.workers().end(), ui_worker); | 460 std::find(second.workers().begin(), second.workers().end(), ui_worker); |
460 EXPECT_NE(it_passive, second.workers().end()); | 461 EXPECT_NE(it_passive, second.workers().end()); |
(...skipping 13 matching lines...) Expand all Loading... |
474 EXPECT_EQ(it1->second, GROUP_DB); | 475 EXPECT_EQ(it1->second, GROUP_DB); |
475 | 476 |
476 // Note that attempting to use EXPECT_NE would fail for an Android build due | 477 // Note that attempting to use EXPECT_NE would fail for an Android build due |
477 // to seeming incompatibility with gtest and stlport. | 478 // to seeming incompatibility with gtest and stlport. |
478 EXPECT_TRUE(it2 != second.routing_info().end()); | 479 EXPECT_TRUE(it2 != second.routing_info().end()); |
479 EXPECT_EQ(it2->second, GROUP_UI); | 480 EXPECT_EQ(it2->second, GROUP_UI); |
480 EXPECT_EQ(second.routing_info().size(), 2U); | 481 EXPECT_EQ(second.routing_info().size(), 2U); |
481 } | 482 } |
482 | 483 |
483 | 484 |
484 TEST_F(SyncSessionTest, MakeTypePayloadMapFromBitSet) { | 485 TEST_F(SyncSessionTest, MakeTypeStateMapFromBitSet) { |
485 ModelTypeSet types; | 486 ModelTypeSet types; |
486 std::string payload = "test"; | 487 std::string payload = "test"; |
487 ModelTypePayloadMap types_with_payloads = | 488 ModelTypeStateMap type_state_map = |
488 ModelTypePayloadMapFromEnumSet(types, payload); | 489 ModelTypeSetToStateMap(types, payload); |
489 EXPECT_TRUE(types_with_payloads.empty()); | 490 EXPECT_TRUE(type_state_map.empty()); |
490 | 491 |
491 types.Put(BOOKMARKS); | 492 types.Put(BOOKMARKS); |
492 types.Put(PASSWORDS); | 493 types.Put(PASSWORDS); |
493 types.Put(AUTOFILL); | 494 types.Put(AUTOFILL); |
494 payload = "test2"; | 495 payload = "test2"; |
495 types_with_payloads = ModelTypePayloadMapFromEnumSet(types, payload); | 496 type_state_map = ModelTypeSetToStateMap(types, payload); |
496 | 497 |
497 ASSERT_EQ(3U, types_with_payloads.size()); | 498 ASSERT_EQ(3U, type_state_map.size()); |
498 EXPECT_EQ(types_with_payloads[BOOKMARKS], payload); | 499 EXPECT_EQ(type_state_map[BOOKMARKS].payload, payload); |
499 EXPECT_EQ(types_with_payloads[PASSWORDS], payload); | 500 EXPECT_EQ(type_state_map[PASSWORDS].payload, payload); |
500 EXPECT_EQ(types_with_payloads[AUTOFILL], payload); | 501 EXPECT_EQ(type_state_map[AUTOFILL].payload, payload); |
501 } | 502 } |
502 | 503 |
503 } // namespace | 504 } // namespace |
504 } // namespace sessions | 505 } // namespace sessions |
505 } // namespace syncer | 506 } // namespace syncer |
OLD | NEW |