| Index: chrome/browser/sync/test/integration/two_client_uss_sync_test.cc
|
| diff --git a/chrome/browser/sync/test/integration/two_client_uss_sync_test.cc b/chrome/browser/sync/test/integration/two_client_uss_sync_test.cc
|
| index b9df9538c0d7a1787998a90d1c71916cec9d5e10..977df4b1d367daf7d8308d05cb0729262c51381e 100644
|
| --- a/chrome/browser/sync/test/integration/two_client_uss_sync_test.cc
|
| +++ b/chrome/browser/sync/test/integration/two_client_uss_sync_test.cc
|
| @@ -8,6 +8,7 @@
|
| #include "chrome/browser/sync/chrome_sync_client.h"
|
| #include "chrome/browser/sync/profile_sync_service_factory.h"
|
| #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
|
| +#include "chrome/browser/sync/test/integration/single_client_status_change_checker.h"
|
| #include "chrome/browser/sync/test/integration/status_change_checker.h"
|
| #include "chrome/browser/sync/test/integration/sync_integration_test_util.h"
|
| #include "chrome/browser/sync/test/integration/sync_test.h"
|
| @@ -23,6 +24,7 @@ using syncer_v2::ModelTypeService;
|
| using syncer_v2::SharedModelTypeProcessor;
|
|
|
| const char kKey1[] = "key1";
|
| +const char kKey2[] = "key2";
|
| const char kValue1[] = "value1";
|
| const char kValue2[] = "value2";
|
| const char kValue3[] = "value3";
|
| @@ -90,7 +92,6 @@ class KeyChecker : public StatusChangeChecker,
|
| public:
|
| KeyChecker(TestModelTypeService* service, const std::string& key)
|
| : service_(service), key_(key) {}
|
| - ~KeyChecker() override {}
|
|
|
| void OnApplySyncChanges() override { CheckExitCondition(); }
|
|
|
| @@ -118,7 +119,6 @@ class DataChecker : public KeyChecker {
|
| const std::string& key,
|
| const std::string& value)
|
| : KeyChecker(service, key), value_(value) {}
|
| - ~DataChecker() override {}
|
|
|
| bool IsExitConditionSatisfied() override {
|
| const auto& db = service_->db();
|
| @@ -138,7 +138,6 @@ class DataAbsentChecker : public KeyChecker {
|
| public:
|
| DataAbsentChecker(TestModelTypeService* service, const std::string& key)
|
| : KeyChecker(service, key) {}
|
| - ~DataAbsentChecker() override {}
|
|
|
| bool IsExitConditionSatisfied() override {
|
| return !service_->db().HasData(key_);
|
| @@ -154,7 +153,6 @@ class MetadataPresentChecker : public KeyChecker {
|
| public:
|
| MetadataPresentChecker(TestModelTypeService* service, const std::string& key)
|
| : KeyChecker(service, key) {}
|
| - ~MetadataPresentChecker() override {}
|
|
|
| bool IsExitConditionSatisfied() override {
|
| return service_->db().HasMetadata(key_);
|
| @@ -170,7 +168,6 @@ class MetadataAbsentChecker : public KeyChecker {
|
| public:
|
| MetadataAbsentChecker(TestModelTypeService* service, const std::string& key)
|
| : KeyChecker(service, key) {}
|
| - ~MetadataAbsentChecker() override {}
|
|
|
| bool IsExitConditionSatisfied() override {
|
| return !service_->db().HasMetadata(key_);
|
| @@ -181,6 +178,26 @@ class MetadataAbsentChecker : public KeyChecker {
|
| }
|
| };
|
|
|
| +// Wait for PREFERENCES to no longer be running.
|
| +class PrefsNotRunningChecker : public SingleClientStatusChangeChecker {
|
| + public:
|
| + explicit PrefsNotRunningChecker(browser_sync::ProfileSyncService* service)
|
| + : SingleClientStatusChangeChecker(service) {}
|
| +
|
| + bool Wait() {
|
| + SingleClientStatusChangeChecker::Wait();
|
| + return !TimedOut();
|
| + }
|
| +
|
| + bool IsExitConditionSatisfied() override {
|
| + return !service()->IsDataTypeControllerRunning(syncer::PREFERENCES);
|
| + }
|
| +
|
| + std::string GetDebugMessage() const override {
|
| + return "Waiting for prefs to be not running.";
|
| + }
|
| +};
|
| +
|
| class TwoClientUssSyncTest : public SyncTest {
|
| public:
|
| TwoClientUssSyncTest() : SyncTest(TWO_CLIENT) {
|
| @@ -301,3 +318,24 @@ IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, ConflictResolution) {
|
| ASSERT_TRUE(DataChecker(model1, kKey1, kValue3).Wait());
|
| ASSERT_TRUE(DataChecker(model2, kKey1, kValue3).Wait());
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, Error) {
|
| + ASSERT_TRUE(SetupSync());
|
| + TestModelTypeService* model1 = GetModelTypeService(0);
|
| + TestModelTypeService* model2 = GetModelTypeService(1);
|
| +
|
| + // Add an entity.
|
| + model1->WriteItem(kKey1, kValue1);
|
| + ASSERT_TRUE(DataChecker(model2, kKey1, kValue1).Wait());
|
| +
|
| + // Set an error in model 2 to trigger in the next GetUpdates.
|
| + model2->SetServiceError(syncer::SyncError::DATATYPE_ERROR);
|
| + // Write an item on model 1 to trigger a GetUpdates in model 2.
|
| + model1->WriteItem(kKey1, kValue2);
|
| +
|
| + // The type should stop syncing but keep tracking metadata.
|
| + ASSERT_TRUE(PrefsNotRunningChecker(GetSyncService(1)).Wait());
|
| + ASSERT_EQ(1U, model2->db().metadata_count());
|
| + model2->WriteItem(kKey2, kValue2);
|
| + ASSERT_EQ(2U, model2->db().metadata_count());
|
| +}
|
|
|