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

Side by Side Diff: chrome/browser/extensions/api/storage/settings_sync_unittest.cc

Issue 151963002: Remove duplicated code from sync related unit tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename SyncChangeProcessorDelgate to SyncChangeProcessorDelgator. Created 6 years, 10 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 unified diff | Download patch
OLDNEW
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "chrome/browser/extensions/api/storage/leveldb_settings_storage_factory .h" 11 #include "chrome/browser/extensions/api/storage/leveldb_settings_storage_factory .h"
12 #include "chrome/browser/extensions/api/storage/settings_frontend.h" 12 #include "chrome/browser/extensions/api/storage/settings_frontend.h"
13 #include "chrome/browser/extensions/api/storage/settings_storage_factory.h" 13 #include "chrome/browser/extensions/api/storage/settings_storage_factory.h"
14 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" 14 #include "chrome/browser/extensions/api/storage/settings_sync_util.h"
15 #include "chrome/browser/extensions/api/storage/settings_test_util.h" 15 #include "chrome/browser/extensions/api/storage/settings_test_util.h"
16 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" 16 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h"
17 #include "chrome/browser/extensions/test_extension_service.h" 17 #include "chrome/browser/extensions/test_extension_service.h"
18 #include "chrome/browser/value_store/testing_value_store.h" 18 #include "chrome/browser/value_store/testing_value_store.h"
19 #include "content/public/test/test_browser_thread.h" 19 #include "content/public/test/test_browser_thread.h"
20 #include "extensions/browser/extension_system.h" 20 #include "extensions/browser/extension_system.h"
21 #include "extensions/common/manifest.h" 21 #include "extensions/common/manifest.h"
22 #include "sync/api/sync_change_processor.h" 22 #include "sync/api/sync_change_processor.h"
23 #include "sync/api/sync_change_processor_delegator.h"
23 #include "sync/api/sync_error_factory.h" 24 #include "sync/api/sync_error_factory.h"
24 #include "sync/api/sync_error_factory_mock.h" 25 #include "sync/api/sync_error_factory_mock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
26 27
27 using base::DictionaryValue; 28 using base::DictionaryValue;
28 using base::ListValue; 29 using base::ListValue;
29 using base::Value; 30 using base::Value;
30 using content::BrowserThread; 31 using content::BrowserThread;
31 32
32 namespace extensions { 33 namespace extensions {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 extension_id << "/" << key << " (out of " << changes_.size() << ")"; 151 extension_id << "/" << key << " (out of " << changes_.size() << ")";
151 } 152 }
152 return matching_changes[0]; 153 return matching_changes[0];
153 } 154 }
154 155
155 private: 156 private:
156 SettingSyncDataList changes_; 157 SettingSyncDataList changes_;
157 bool fail_all_requests_; 158 bool fail_all_requests_;
158 }; 159 };
159 160
160 class SyncChangeProcessorDelegate : public syncer::SyncChangeProcessor {
161 public:
162 explicit SyncChangeProcessorDelegate(syncer::SyncChangeProcessor* recipient)
163 : recipient_(recipient) {
164 DCHECK(recipient_);
165 }
166 virtual ~SyncChangeProcessorDelegate() {}
167
168 // syncer::SyncChangeProcessor implementation.
169 virtual syncer::SyncError ProcessSyncChanges(
170 const tracked_objects::Location& from_here,
171 const syncer::SyncChangeList& change_list) OVERRIDE {
172 return recipient_->ProcessSyncChanges(from_here, change_list);
173 }
174
175 virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const
176 OVERRIDE {
177 return recipient_->GetAllSyncData(type);
178 }
179
180 private:
181 // The recipient of all sync changes.
182 syncer::SyncChangeProcessor* recipient_;
183
184 DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate);
185 };
186
187 // SettingsStorageFactory which always returns TestingValueStore objects, 161 // SettingsStorageFactory which always returns TestingValueStore objects,
188 // and allows individually created objects to be returned. 162 // and allows individually created objects to be returned.
189 class TestingValueStoreFactory : public SettingsStorageFactory { 163 class TestingValueStoreFactory : public SettingsStorageFactory {
190 public: 164 public:
191 TestingValueStore* GetExisting(const std::string& extension_id) { 165 TestingValueStore* GetExisting(const std::string& extension_id) {
192 DCHECK(created_.count(extension_id)); 166 DCHECK(created_.count(extension_id));
193 return created_[extension_id]; 167 return created_[extension_id];
194 } 168 }
195 169
196 // SettingsStorageFactory implementation. 170 // SettingsStorageFactory implementation.
(...skipping 16 matching lines...) Expand all
213 187
214 } // namespace 188 } // namespace
215 189
216 class ExtensionSettingsSyncTest : public testing::Test { 190 class ExtensionSettingsSyncTest : public testing::Test {
217 public: 191 public:
218 ExtensionSettingsSyncTest() 192 ExtensionSettingsSyncTest()
219 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()), 193 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()),
220 file_thread_(BrowserThread::FILE, base::MessageLoop::current()), 194 file_thread_(BrowserThread::FILE, base::MessageLoop::current()),
221 storage_factory_(new util::ScopedSettingsStorageFactory()), 195 storage_factory_(new util::ScopedSettingsStorageFactory()),
222 sync_processor_(new MockSyncChangeProcessor), 196 sync_processor_(new MockSyncChangeProcessor),
223 sync_processor_delegate_(new SyncChangeProcessorDelegate( 197 sync_processor_delegate_(
224 sync_processor_.get())) {} 198 new syncer::SyncChangeProcessorDelegator(sync_processor_.get())) {}
225 199
226 virtual void SetUp() OVERRIDE { 200 virtual void SetUp() OVERRIDE {
227 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 201 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
228 profile_.reset(new util::MockProfile(temp_dir_.path())); 202 profile_.reset(new util::MockProfile(temp_dir_.path()));
229 storage_factory_->Reset(new LeveldbSettingsStorageFactory()); 203 storage_factory_->Reset(new LeveldbSettingsStorageFactory());
230 frontend_.reset( 204 frontend_.reset(
231 SettingsFrontend::Create(storage_factory_.get(), profile_.get())); 205 SettingsFrontend::Create(storage_factory_.get(), profile_.get()));
232 } 206 }
233 207
234 virtual void TearDown() OVERRIDE { 208 virtual void TearDown() OVERRIDE {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 // Need these so that the DCHECKs for running on FILE or UI threads pass. 248 // Need these so that the DCHECKs for running on FILE or UI threads pass.
275 base::MessageLoop message_loop_; 249 base::MessageLoop message_loop_;
276 content::TestBrowserThread ui_thread_; 250 content::TestBrowserThread ui_thread_;
277 content::TestBrowserThread file_thread_; 251 content::TestBrowserThread file_thread_;
278 252
279 base::ScopedTempDir temp_dir_; 253 base::ScopedTempDir temp_dir_;
280 scoped_ptr<util::MockProfile> profile_; 254 scoped_ptr<util::MockProfile> profile_;
281 scoped_ptr<SettingsFrontend> frontend_; 255 scoped_ptr<SettingsFrontend> frontend_;
282 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; 256 scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_;
283 scoped_ptr<MockSyncChangeProcessor> sync_processor_; 257 scoped_ptr<MockSyncChangeProcessor> sync_processor_;
284 scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; 258 scoped_ptr<syncer::SyncChangeProcessorDelegator> sync_processor_delegate_;
285 }; 259 };
286 260
287 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS 261 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS
288 // sync by roughly alternative which one to test. 262 // sync by roughly alternative which one to test.
289 263
290 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { 264 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) {
291 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; 265 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS;
292 Manifest::Type type = Manifest::TYPE_EXTENSION; 266 Manifest::Type type = Manifest::TYPE_EXTENSION;
293 267
294 EXPECT_EQ(0u, GetAllSyncData(model_type).size()); 268 EXPECT_EQ(0u, GetAllSyncData(model_type).size());
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 660 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
687 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 661 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
688 GetSyncableService(syncer::EXTENSION_SETTINGS)-> 662 GetSyncableService(syncer::EXTENSION_SETTINGS)->
689 StopSyncing(syncer::EXTENSION_SETTINGS); 663 StopSyncing(syncer::EXTENSION_SETTINGS);
690 EXPECT_EQ(0u, sync_processor_->changes().size()); 664 EXPECT_EQ(0u, sync_processor_->changes().size());
691 665
692 sync_data.clear(); 666 sync_data.clear();
693 sync_data.push_back(settings_sync_util::CreateData( 667 sync_data.push_back(settings_sync_util::CreateData(
694 "s2", "bar", value2, syncer::APP_SETTINGS)); 668 "s2", "bar", value2, syncer::APP_SETTINGS));
695 669
696 scoped_ptr<SyncChangeProcessorDelegate> app_settings_delegate_( 670 scoped_ptr<syncer::SyncChangeProcessorDelegator> app_settings_delegate_(
697 new SyncChangeProcessorDelegate(sync_processor_.get())); 671 new syncer::SyncChangeProcessorDelegator(sync_processor_.get()));
698 GetSyncableService(syncer::APP_SETTINGS)->MergeDataAndStartSyncing( 672 GetSyncableService(syncer::APP_SETTINGS)->MergeDataAndStartSyncing(
699 syncer::APP_SETTINGS, 673 syncer::APP_SETTINGS,
700 sync_data, 674 sync_data,
701 app_settings_delegate_.PassAs<syncer::SyncChangeProcessor>(), 675 app_settings_delegate_.PassAs<syncer::SyncChangeProcessor>(),
702 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 676 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
703 GetSyncableService(syncer::APP_SETTINGS)-> 677 GetSyncableService(syncer::APP_SETTINGS)->
704 StopSyncing(syncer::APP_SETTINGS); 678 StopSyncing(syncer::APP_SETTINGS);
705 EXPECT_EQ(0u, sync_processor_->changes().size()); 679 EXPECT_EQ(0u, sync_processor_->changes().size());
706 } 680 }
707 681
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 } 813 }
840 { 814 {
841 base::DictionaryValue dict; 815 base::DictionaryValue dict;
842 dict.Set("bar", fooValue.DeepCopy()); 816 dict.Set("bar", fooValue.DeepCopy());
843 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 817 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
844 } 818 }
845 819
846 // Restarting sync should make bad start syncing again. 820 // Restarting sync should make bad start syncing again.
847 sync_processor_->ClearChanges(); 821 sync_processor_->ClearChanges();
848 GetSyncableService(model_type)->StopSyncing(model_type); 822 GetSyncableService(model_type)->StopSyncing(model_type);
849 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( 823 sync_processor_delegate_.reset(
850 sync_processor_.get())); 824 new syncer::SyncChangeProcessorDelegator(sync_processor_.get()));
851 GetSyncableService(model_type)->MergeDataAndStartSyncing( 825 GetSyncableService(model_type)->MergeDataAndStartSyncing(
852 model_type, 826 model_type,
853 syncer::SyncDataList(), 827 syncer::SyncDataList(),
854 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 828 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
855 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 829 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
856 830
857 // Local settings will have been pushed to sync, since it's empty (in this 831 // Local settings will have been pushed to sync, since it's empty (in this
858 // test; presumably it wouldn't be live, since we've been getting changes). 832 // test; presumably it wouldn't be live, since we've been getting changes).
859 EXPECT_EQ( 833 EXPECT_EQ(
860 syncer::SyncChange::ACTION_ADD, 834 syncer::SyncChange::ACTION_ADD,
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 base::DictionaryValue dict; 1094 base::DictionaryValue dict;
1121 dict.Set("foo", fooValue.DeepCopy()); 1095 dict.Set("foo", fooValue.DeepCopy());
1122 dict.Set("bar", barValue.DeepCopy()); 1096 dict.Set("bar", barValue.DeepCopy());
1123 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1097 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1124 } 1098 }
1125 1099
1126 // Re-enabling sync without failing should cause the local changes from bad 1100 // Re-enabling sync without failing should cause the local changes from bad
1127 // to be pushed to sync successfully, as should future changes to bad. 1101 // to be pushed to sync successfully, as should future changes to bad.
1128 sync_processor_->ClearChanges(); 1102 sync_processor_->ClearChanges();
1129 GetSyncableService(model_type)->StopSyncing(model_type); 1103 GetSyncableService(model_type)->StopSyncing(model_type);
1130 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( 1104 sync_processor_delegate_.reset(
1131 sync_processor_.get())); 1105 new syncer::SyncChangeProcessorDelegator(sync_processor_.get()));
1132 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1106 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1133 model_type, 1107 model_type,
1134 syncer::SyncDataList(), 1108 syncer::SyncDataList(),
1135 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1109 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1136 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1110 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1137 1111
1138 EXPECT_EQ( 1112 EXPECT_EQ(
1139 syncer::SyncChange::ACTION_ADD, 1113 syncer::SyncChange::ACTION_ADD,
1140 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1114 sync_processor_->GetOnlyChange("good", "foo").change_type());
1141 EXPECT_EQ( 1115 EXPECT_EQ(
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 } 1188 }
1215 { 1189 {
1216 base::DictionaryValue dict; 1190 base::DictionaryValue dict;
1217 dict.Set("foo", barValue.DeepCopy()); 1191 dict.Set("foo", barValue.DeepCopy());
1218 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1192 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1219 } 1193 }
1220 1194
1221 // Restarting sync makes everything work again. 1195 // Restarting sync makes everything work again.
1222 sync_processor_->ClearChanges(); 1196 sync_processor_->ClearChanges();
1223 GetSyncableService(model_type)->StopSyncing(model_type); 1197 GetSyncableService(model_type)->StopSyncing(model_type);
1224 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( 1198 sync_processor_delegate_.reset(
1225 sync_processor_.get())); 1199 new syncer::SyncChangeProcessorDelegator(sync_processor_.get()));
1226 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1200 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1227 model_type, 1201 model_type,
1228 syncer::SyncDataList(), 1202 syncer::SyncDataList(),
1229 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1203 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1230 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1204 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1231 1205
1232 EXPECT_EQ( 1206 EXPECT_EQ(
1233 syncer::SyncChange::ACTION_ADD, 1207 syncer::SyncChange::ACTION_ADD,
1234 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1208 sync_processor_->GetOnlyChange("good", "foo").change_type());
1235 EXPECT_EQ( 1209 EXPECT_EQ(
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 } 1285 }
1312 { 1286 {
1313 base::DictionaryValue dict; 1287 base::DictionaryValue dict;
1314 dict.Set("foo", barValue.DeepCopy()); 1288 dict.Set("foo", barValue.DeepCopy());
1315 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1289 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1316 } 1290 }
1317 1291
1318 // Restarting sync makes everything work again. 1292 // Restarting sync makes everything work again.
1319 sync_processor_->ClearChanges(); 1293 sync_processor_->ClearChanges();
1320 GetSyncableService(model_type)->StopSyncing(model_type); 1294 GetSyncableService(model_type)->StopSyncing(model_type);
1321 sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( 1295 sync_processor_delegate_.reset(
1322 sync_processor_.get())); 1296 new syncer::SyncChangeProcessorDelegator(sync_processor_.get()));
1323 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1297 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1324 model_type, 1298 model_type,
1325 syncer::SyncDataList(), 1299 syncer::SyncDataList(),
1326 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1300 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1327 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1301 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1328 1302
1329 EXPECT_EQ( 1303 EXPECT_EQ(
1330 syncer::SyncChange::ACTION_ADD, 1304 syncer::SyncChange::ACTION_ADD,
1331 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1305 sync_processor_->GetOnlyChange("good", "foo").change_type());
1332 EXPECT_EQ( 1306 EXPECT_EQ(
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 ASSERT_EQ(1u, sync_processor_->changes().size()); 1407 ASSERT_EQ(1u, sync_processor_->changes().size());
1434 SettingSyncData sync_data = sync_processor_->changes()[0]; 1408 SettingSyncData sync_data = sync_processor_->changes()[0];
1435 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data.change_type()); 1409 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data.change_type());
1436 EXPECT_EQ("ext", sync_data.extension_id()); 1410 EXPECT_EQ("ext", sync_data.extension_id());
1437 EXPECT_EQ("key.with.spot", sync_data.key()); 1411 EXPECT_EQ("key.with.spot", sync_data.key());
1438 EXPECT_TRUE(sync_data.value().Equals(string_value.get())); 1412 EXPECT_TRUE(sync_data.value().Equals(string_value.get()));
1439 } 1413 }
1440 } 1414 }
1441 1415
1442 } // namespace extensions 1416 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698