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 29aa0b837311c47b52bdf985254618f2529634bd..c0d5bb212a0f5aecb5f4ec450a78f516fa45f3c7 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 |
@@ -25,11 +25,16 @@ using syncer::FakeModelTypeService; |
using syncer::ModelTypeChangeProcessor; |
using syncer::ModelTypeService; |
+namespace { |
+ |
const char kKey1[] = "key1"; |
const char kKey2[] = "key2"; |
+const char kKey3[] = "key3"; |
+const char kKey4[] = "key4"; |
const char kValue1[] = "value1"; |
const char kValue2[] = "value2"; |
const char kValue3[] = "value3"; |
+const char* kPassphrase = "12345"; |
// A ChromeSyncClient that provides a ModelTypeService for PREFERENCES. |
class TestSyncClient : public ChromeSyncClient { |
@@ -233,34 +238,34 @@ IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, Sanity) { |
ASSERT_TRUE(SetupSync()); |
ASSERT_EQ(2U, clients_.size()); |
ASSERT_EQ(2U, services_.size()); |
- TestModelTypeService* model1 = GetModelTypeService(0); |
- TestModelTypeService* model2 = GetModelTypeService(1); |
+ TestModelTypeService* model0 = GetModelTypeService(0); |
+ TestModelTypeService* model1 = GetModelTypeService(1); |
// Add an entity. |
- model1->WriteItem(kKey1, kValue1); |
- ASSERT_TRUE(DataChecker(model2, kKey1, kValue1).Wait()); |
+ model0->WriteItem(kKey1, kValue1); |
+ ASSERT_TRUE(DataChecker(model1, kKey1, kValue1).Wait()); |
// Update an entity. |
- model1->WriteItem(kKey1, kValue2); |
- ASSERT_TRUE(DataChecker(model2, kKey1, kValue2).Wait()); |
+ model0->WriteItem(kKey1, kValue2); |
+ ASSERT_TRUE(DataChecker(model1, kKey1, kValue2).Wait()); |
// Delete an entity. |
- model1->DeleteItem(kKey1); |
- ASSERT_TRUE(DataAbsentChecker(model2, kKey1).Wait()); |
+ model0->DeleteItem(kKey1); |
+ ASSERT_TRUE(DataAbsentChecker(model1, kKey1).Wait()); |
} |
IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, DisableEnable) { |
ASSERT_TRUE(SetupSync()); |
- TestModelTypeService* model1 = GetModelTypeService(0); |
- TestModelTypeService* model2 = GetModelTypeService(1); |
+ TestModelTypeService* model0 = GetModelTypeService(0); |
+ TestModelTypeService* model1 = GetModelTypeService(1); |
// Add an entity to test with. |
- model1->WriteItem(kKey1, kValue1); |
- ASSERT_TRUE(DataChecker(model2, kKey1, kValue1).Wait()); |
+ model0->WriteItem(kKey1, kValue1); |
+ ASSERT_TRUE(DataChecker(model1, kKey1, kValue1).Wait()); |
+ ASSERT_EQ(1U, model0->db().data_count()); |
+ ASSERT_EQ(1U, model0->db().metadata_count()); |
ASSERT_EQ(1U, model1->db().data_count()); |
ASSERT_EQ(1U, model1->db().metadata_count()); |
- ASSERT_EQ(1U, model2->db().data_count()); |
- ASSERT_EQ(1U, model2->db().metadata_count()); |
// Disable PREFERENCES. |
syncer::ModelTypeSet types = syncer::UserSelectableTypes(); |
@@ -268,60 +273,94 @@ IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, DisableEnable) { |
GetSyncService(0)->OnUserChoseDatatypes(false, types); |
// Wait for it to take effect and remove the metadata. |
- ASSERT_TRUE(MetadataAbsentChecker(model1, kKey1).Wait()); |
+ ASSERT_TRUE(MetadataAbsentChecker(model0, kKey1).Wait()); |
+ ASSERT_EQ(1U, model0->db().data_count()); |
+ ASSERT_EQ(0U, model0->db().metadata_count()); |
+ // Model 1 should not be affected. |
ASSERT_EQ(1U, model1->db().data_count()); |
- ASSERT_EQ(0U, model1->db().metadata_count()); |
- // Model 2 should not be affected. |
- ASSERT_EQ(1U, model2->db().data_count()); |
- ASSERT_EQ(1U, model2->db().metadata_count()); |
+ ASSERT_EQ(1U, model1->db().metadata_count()); |
// Re-enable PREFERENCES. |
GetSyncService(0)->OnUserChoseDatatypes(true, syncer::UserSelectableTypes()); |
// Wait for metadata to be re-added. |
- ASSERT_TRUE(MetadataPresentChecker(model1, kKey1).Wait()); |
+ ASSERT_TRUE(MetadataPresentChecker(model0, kKey1).Wait()); |
+ ASSERT_EQ(1U, model0->db().data_count()); |
+ ASSERT_EQ(1U, model0->db().metadata_count()); |
ASSERT_EQ(1U, model1->db().data_count()); |
ASSERT_EQ(1U, model1->db().metadata_count()); |
- ASSERT_EQ(1U, model2->db().data_count()); |
- ASSERT_EQ(1U, model2->db().metadata_count()); |
} |
IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, ConflictResolution) { |
ASSERT_TRUE(SetupSync()); |
- TestModelTypeService* model1 = GetModelTypeService(0); |
- TestModelTypeService* model2 = GetModelTypeService(1); |
- model1->SetConflictResolution(ConflictResolution::UseNew( |
+ TestModelTypeService* model0 = GetModelTypeService(0); |
+ TestModelTypeService* model1 = GetModelTypeService(1); |
+ model0->SetConflictResolution(ConflictResolution::UseNew( |
FakeModelTypeService::GenerateEntityData(kKey1, kValue3))); |
- model2->SetConflictResolution(ConflictResolution::UseNew( |
+ model1->SetConflictResolution(ConflictResolution::UseNew( |
FakeModelTypeService::GenerateEntityData(kKey1, kValue3))); |
// Write conflicting entities. |
- model1->WriteItem(kKey1, kValue1); |
- model2->WriteItem(kKey1, kValue2); |
+ model0->WriteItem(kKey1, kValue1); |
+ model1->WriteItem(kKey1, kValue2); |
// Wait for them to be resolved to kResolutionValue by the custom conflict |
// resolution logic in TestModelTypeService. |
+ ASSERT_TRUE(DataChecker(model0, kKey1, kValue3).Wait()); |
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); |
+ TestModelTypeService* model0 = GetModelTypeService(0); |
+ TestModelTypeService* model1 = GetModelTypeService(1); |
// Add an entity. |
- model1->WriteItem(kKey1, kValue1); |
- ASSERT_TRUE(DataChecker(model2, kKey1, kValue1).Wait()); |
+ model0->WriteItem(kKey1, kValue1); |
+ ASSERT_TRUE(DataChecker(model1, 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); |
+ // Set an error in model 1 to trigger in the next GetUpdates. |
+ model1->SetServiceError(syncer::SyncError::DATATYPE_ERROR); |
+ // Write an item on model 0 to trigger a GetUpdates in model 1. |
+ model0->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()); |
+ ASSERT_EQ(1U, model1->db().metadata_count()); |
+ model1->WriteItem(kKey2, kValue2); |
+ ASSERT_EQ(2U, model1->db().metadata_count()); |
} |
+ |
+IN_PROC_BROWSER_TEST_F(TwoClientUssSyncTest, Encryption) { |
+ ASSERT_TRUE(SetupSync()); |
+ TestModelTypeService* model0 = GetModelTypeService(0); |
+ TestModelTypeService* model1 = GetModelTypeService(1); |
+ |
+ model0->WriteItem(kKey1, kValue1); |
+ ASSERT_TRUE(DataChecker(model1, kKey1, kValue1).Wait()); |
+ |
+ GetSyncService(0)->SetEncryptionPassphrase(kPassphrase, |
+ syncer::SyncService::EXPLICIT); |
+ ASSERT_TRUE(PassphraseAcceptedChecker(GetSyncService(0)).Wait()); |
+ // Wait for client 1 to know that a passphrase is happening to avoid potential |
+ // race conditions and make the functionality this case tests more consistent. |
+ ASSERT_TRUE(PassphraseRequiredChecker(GetSyncService(1)).Wait()); |
+ |
+ model0->WriteItem(kKey1, kValue2); |
+ model0->WriteItem(kKey2, kValue1); |
+ model1->WriteItem(kKey3, kValue1); |
+ |
+ ASSERT_TRUE(GetSyncService(1)->SetDecryptionPassphrase(kPassphrase)); |
+ ASSERT_TRUE(PassphraseAcceptedChecker(GetSyncService(1)).Wait()); |
+ |
+ model0->WriteItem(kKey4, kValue1); |
+ |
+ ASSERT_TRUE(DataChecker(model1, kKey1, kValue2).Wait()); |
+ ASSERT_TRUE(DataChecker(model1, kKey2, kValue1).Wait()); |
+ ASSERT_TRUE(DataChecker(model1, kKey4, kValue1).Wait()); |
+ |
+ ASSERT_TRUE(DataChecker(model0, kKey1, kValue2).Wait()); |
+ ASSERT_TRUE(DataChecker(model0, kKey3, kValue1).Wait()); |
+} |
+ |
+} // namespace |