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

Unified Diff: chrome/browser/sync/test/integration/two_client_uss_sync_test.cc

Issue 2369063003: [Sync] Add an error integration test for USS. (Closed)
Patch Set: Improve comments. Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/sync/driver/data_type_manager_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
+}
« no previous file with comments | « no previous file | components/sync/driver/data_type_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698