Chromium Code Reviews| Index: chrome/browser/extensions/settings/settings_sync_unittest.cc |
| diff --git a/chrome/browser/extensions/settings/settings_sync_unittest.cc b/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| index 2f22f57c89e6696fca0376fcc72a06772ad85a8a..7a0f75994b6f3d06b0f2b39733d2d9c6895b7a73 100644 |
| --- a/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| +++ b/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| @@ -32,6 +32,9 @@ using namespace settings_test_util; |
| namespace { |
| +// To save typing SettingsStorage::DEFAULTS everywhere. |
| +const SettingsStorage::WriteOptions DEFAULTS = SettingsStorage::DEFAULTS; |
| + |
| // Gets the pretty-printed JSON for a value. |
| static std::string GetJson(const Value& value) { |
| std::string json; |
| @@ -272,8 +275,8 @@ TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
| SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| - storage1->Set("foo", value1); |
| - storage2->Set("bar", value2); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| + storage2->Set(DEFAULTS, "bar", value2); |
| std::map<std::string, SettingSyncDataList> all_sync_data = |
| GetAllSyncData(model_type); |
| @@ -297,10 +300,10 @@ TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
| // Regression test: not-changing the synced value shouldn't result in a sync |
| // change, and changing the synced value should result in an update. |
| - storage1->Set("foo", value1); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| ASSERT_EQ(0u, sync_.changes().size()); |
| - storage1->Set("foo", value2); |
| + storage1->Set(DEFAULTS, "foo", value2); |
| ASSERT_EQ(1u, sync_.changes().size()); |
| SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
| ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| @@ -320,8 +323,8 @@ TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
| SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| - storage1->Set("foo", value1); |
| - storage2->Set("bar", value2); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| + storage2->Set(DEFAULTS, "bar", value2); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| model_type, SyncDataList(), &sync_); |
| @@ -352,7 +355,7 @@ TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
| // Pre-populate one of the storage areas. |
| SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| - storage1->Set("overwriteMe", value1); |
| + storage1->Set(DEFAULTS, "overwriteMe", value1); |
| SyncDataList sync_data; |
| sync_data.push_back(settings_sync_util::CreateData( |
| @@ -392,7 +395,7 @@ TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
| SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| - storage1->Set("foo", value1); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| expected1.Set("foo", value1.DeepCopy()); |
| SyncDataList sync_data; |
| @@ -462,8 +465,8 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| SettingsStorage* storage3 = AddExtensionAndGetStorage("s3", type); |
| SettingsStorage* storage4 = AddExtensionAndGetStorage("s4", type); |
| - storage1->Set("foo", value1); |
| - storage2->Set("foo", value1); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| + storage2->Set(DEFAULTS, "foo", value1); |
| SyncDataList sync_data; |
| sync_data.push_back(settings_sync_util::CreateData( |
| @@ -475,10 +478,10 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| model_type, sync_data, &sync_); |
| // Add something locally. |
| - storage1->Set("bar", value2); |
| - storage2->Set("bar", value2); |
| - storage3->Set("foo", value1); |
| - storage4->Set("foo", value1); |
| + storage1->Set(DEFAULTS, "bar", value2); |
| + storage2->Set(DEFAULTS, "bar", value2); |
| + storage3->Set(DEFAULTS, "foo", value1); |
| + storage4->Set(DEFAULTS, "foo", value1); |
| SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); |
| ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| @@ -497,10 +500,10 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| // initial setting, for all combinations of local vs sync intialisation and |
| // new vs initial. |
| sync_.ClearChanges(); |
| - storage1->Set("bar", value1); |
| - storage2->Set("foo", value2); |
| - storage3->Set("bar", value1); |
| - storage4->Set("foo", value2); |
| + storage1->Set(DEFAULTS, "bar", value1); |
| + storage2->Set(DEFAULTS, "foo", value2); |
| + storage3->Set(DEFAULTS, "bar", value1); |
| + storage4->Set(DEFAULTS, "foo", value2); |
| change = sync_.GetOnlyChange("s1", "bar"); |
| ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| @@ -519,10 +522,10 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| // initial setting, for all combinations of local vs sync intialisation and |
| // new vs initial. |
| sync_.ClearChanges(); |
| - storage1->Remove("foo"); |
| - storage2->Remove("bar"); |
| - storage3->Remove("foo"); |
| - storage4->Remove("bar"); |
| + storage1->Remove(DEFAULTS, "foo"); |
| + storage2->Remove(DEFAULTS, "bar"); |
| + storage3->Remove(DEFAULTS, "foo"); |
| + storage4->Remove(DEFAULTS, "bar"); |
| ASSERT_EQ( |
| SyncChange::ACTION_DELETE, |
| @@ -539,25 +542,25 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| // Remove some nonexistent settings. |
| sync_.ClearChanges(); |
| - storage1->Remove("foo"); |
| - storage2->Remove("bar"); |
| - storage3->Remove("foo"); |
| - storage4->Remove("bar"); |
| + storage1->Remove(DEFAULTS, "foo"); |
| + storage2->Remove(DEFAULTS, "bar"); |
| + storage3->Remove(DEFAULTS, "foo"); |
| + storage4->Remove(DEFAULTS, "bar"); |
| ASSERT_EQ(0u, sync_.changes().size()); |
| // Clear the rest of the settings. Add the removed ones back first so that |
| // more than one setting is cleared. |
| - storage1->Set("foo", value1); |
| - storage2->Set("bar", value2); |
| - storage3->Set("foo", value1); |
| - storage4->Set("bar", value2); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| + storage2->Set(DEFAULTS, "bar", value2); |
| + storage3->Set(DEFAULTS, "foo", value1); |
| + storage4->Set(DEFAULTS, "bar", value2); |
| sync_.ClearChanges(); |
| - storage1->Clear(); |
| - storage2->Clear(); |
| - storage3->Clear(); |
| - storage4->Clear(); |
| + storage1->Clear(DEFAULTS); |
| + storage2->Clear(DEFAULTS); |
| + storage3->Clear(DEFAULTS); |
| + storage4->Clear(DEFAULTS); |
| ASSERT_EQ( |
| SyncChange::ACTION_DELETE, |
| @@ -598,8 +601,8 @@ TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
| SettingsStorage* storage2 = AddExtensionAndGetStorage( |
| "s2", Extension::TYPE_PACKAGED_APP); |
| - storage1->Set("foo", value1); |
| - storage2->Set("bar", value2); |
| + storage1->Set(DEFAULTS, "foo", value1); |
| + storage2->Set(DEFAULTS, "bar", value2); |
| std::map<std::string, SettingSyncDataList> extension_sync_data = |
| GetAllSyncData(syncable::EXTENSION_SETTINGS); |
| @@ -677,8 +680,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| // Changes made to good should be sent to sync, changes from bad shouldn't. |
| sync_.ClearChanges(); |
| - good->Set("bar", barValue); |
| - bad->Set("bar", barValue); |
| + good->Set(DEFAULTS, "bar", barValue); |
| + bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| @@ -725,8 +728,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| // Changes made to bad still shouldn't go to sync, even though it didn't fail |
| // last time. |
| sync_.ClearChanges(); |
| - good->Set("bar", fooValue); |
| - bad->Set("bar", fooValue); |
| + good->Set(DEFAULTS, "bar", fooValue); |
| + bad->Set(DEFAULTS, "bar", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -791,8 +794,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| // Live local changes now get pushed, too. |
| sync_.ClearChanges(); |
| - good->Set("bar", barValue); |
| - bad->Set("bar", barValue); |
| + good->Set(DEFAULTS, "bar", barValue); |
| + bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -891,8 +894,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { |
| // No more changes sent to sync for bad. |
| sync_.ClearChanges(); |
| - good->Set("foo", barValue); |
| - bad->Set("foo", barValue); |
| + good->Set(DEFAULTS, "foo", barValue); |
| + bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -936,8 +939,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { |
| SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| - good->Set("foo", fooValue); |
| - bad->Set("foo", fooValue); |
| + good->Set(DEFAULTS, "foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| // Even though bad will fail to get all sync data, sync data should still |
| // include that from good. |
| @@ -963,8 +966,8 @@ TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { |
| EXPECT_EQ(2u, sync_.changes().size()); |
| sync_.ClearChanges(); |
| - good->Set("bar", barValue); |
| - bad->Set("bar", barValue); |
| + good->Set(DEFAULTS, "bar", barValue); |
| + bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| @@ -989,8 +992,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| SettingsStorage* good = AddExtensionAndGetStorage("good", type); |
| SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| - good->Set("foo", fooValue); |
| - bad->Set("foo", fooValue); |
| + good->Set(DEFAULTS, "foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| // good will successfully push foo:fooValue to sync, but bad will fail to |
| // get them so won't. |
| @@ -1006,8 +1009,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| // bad should now be disabled for sync. |
| sync_.ClearChanges(); |
| - good->Set("bar", barValue); |
| - bad->Set("bar", barValue); |
| + good->Set(DEFAULTS, "bar", barValue); |
| + bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| @@ -1060,8 +1063,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| EXPECT_EQ(4u, sync_.changes().size()); |
| sync_.ClearChanges(); |
| - good->Set("bar", fooValue); |
| - bad->Set("bar", fooValue); |
| + good->Set(DEFAULTS, "bar", fooValue); |
| + bad->Set(DEFAULTS, "bar", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -1087,7 +1090,7 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| // Only set bad; setting good will cause it to fail below. |
| - bad->Set("foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| sync_.SetFailAllRequests(true); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| @@ -1096,8 +1099,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| // Changes from good will be send to sync, changes from bad won't. |
| sync_.ClearChanges(); |
| - good->Set("foo", barValue); |
| - bad->Set("foo", barValue); |
| + good->Set(DEFAULTS, "foo", barValue); |
| + bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| @@ -1144,8 +1147,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| EXPECT_EQ(3u, sync_.changes().size()); |
| sync_.ClearChanges(); |
| - good->Set("foo", fooValue); |
| - bad->Set("foo", fooValue); |
| + good->Set(DEFAULTS, "foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -1174,9 +1177,9 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| model_type, SyncDataList(), &sync_); |
| // bad will fail to send changes. |
| - good->Set("foo", fooValue); |
| + good->Set(DEFAULTS, "foo", fooValue); |
| sync_.SetFailAllRequests(true); |
| - bad->Set("foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| sync_.SetFailAllRequests(false); |
| EXPECT_EQ( |
| @@ -1186,8 +1189,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| // No further changes should be sent from bad. |
| sync_.ClearChanges(); |
| - good->Set("foo", barValue); |
| - bad->Set("foo", barValue); |
| + good->Set(DEFAULTS, "foo", barValue); |
| + bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -1234,8 +1237,8 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| EXPECT_EQ(3u, sync_.changes().size()); |
| sync_.ClearChanges(); |
| - good->Set("foo", fooValue); |
| - bad->Set("foo", fooValue); |
| + good->Set(DEFAULTS, "foo", fooValue); |
| + bad->Set(DEFAULTS, "foo", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| @@ -1246,4 +1249,44 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| EXPECT_EQ(2u, sync_.changes().size()); |
| } |
| +TEST_F(ExtensionSettingsSyncTest, |
| + LargeOutgoingChangeRejectedButIncomingAccepted) { |
|
not at google - send to devlin
2011/11/17 07:02:53
Change #4: another test
|
| + syncable::ModelType model_type = syncable::APP_SETTINGS; |
| + Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| + |
| + // This value should be larger than the limit in settings_backend.cc. |
| + std::string string_5k; |
| + for (size_t i = 0; i < 5000; ++i) { |
| + string_5k.append("a"); |
| + } |
| + StringValue large_value(string_5k); |
| + |
| + GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| + model_type, SyncDataList(), &sync_); |
| + |
| + // Large local change rejected and doesn't get sent out. |
| + SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| + EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); |
| + EXPECT_EQ(0u, sync_.changes().size()); |
| + |
| + // Large incoming change should still get accepted. |
| + SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| + { |
| + SyncChangeList change_list; |
| + change_list.push_back( |
| + settings_sync_util::CreateAdd("s1", "large_value", large_value)); |
| + change_list.push_back( |
| + settings_sync_util::CreateAdd("s2", "large_value", large_value)); |
| + GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
| + } |
| + { |
| + DictionaryValue expected; |
| + expected.Set("large_value", large_value.DeepCopy()); |
| + EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
| + EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
| + } |
| + |
| + GetSyncableService(model_type)->StopSyncing(model_type); |
| +} |
| + |
| } // namespace extensions |