Chromium Code Reviews| Index: chrome/browser/sync/glue/generic_change_processor_unittest.cc |
| diff --git a/chrome/browser/sync/glue/generic_change_processor_unittest.cc b/chrome/browser/sync/glue/generic_change_processor_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0456e79904018f44034b5591a99ad5a3dac97d1e |
| --- /dev/null |
| +++ b/chrome/browser/sync/glue/generic_change_processor_unittest.cc |
| @@ -0,0 +1,105 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/sync/glue/generic_change_processor.h" |
| + |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "base/message_loop.h" |
| +#include "base/stringprintf.h" |
| +#include "chrome/browser/sync/glue/data_type_error_handler_mock.h" |
| +#include "sync/api/fake_syncable_service.h" |
| +#include "sync/api/sync_merge_result.h" |
| +#include "sync/internal_api/public/base/model_type.h" |
| +#include "sync/internal_api/public/read_node.h" |
| +#include "sync/internal_api/public/test/test_user_share.h" |
| +#include "sync/internal_api/public/user_share.h" |
| +#include "sync/internal_api/public/write_node.h" |
| +#include "sync/internal_api/public/write_transaction.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace browser_sync { |
| + |
| +class GenericChangeProcessorTest : public testing::Test { |
|
Nicolas Zea
2013/05/22 22:34:02
put in anon namespace?
rlarocque
2013/05/23 00:39:39
Done.
|
| + public: |
| + // It doesn't matter which type we use. Just pick one. |
| + static const syncer::ModelType kType = syncer::PREFERENCES; |
| + |
| + GenericChangeProcessorTest() : |
| + loop(base::MessageLoop::TYPE_UI), |
| + sync_merge_result_(kType), |
| + merge_result_ptr_factory_(&sync_merge_result_), |
| + syncable_service_ptr_factory_(&fake_syncable_service_) { |
| + } |
| + |
| + virtual void SetUp() OVERRIDE { |
| + test_user_share_.SetUp(); |
| + syncer::TestUserShare::CreateRoot(kType, test_user_share_.user_share()); |
| + change_processor_.reset( |
| + new GenericChangeProcessor( |
| + &data_type_error_handler_, |
| + syncable_service_ptr_factory_.GetWeakPtr(), |
| + merge_result_ptr_factory_.GetWeakPtr(), |
| + test_user_share_.user_share())); |
| + } |
| + |
| + virtual void TearDown() OVERRIDE { |
| + test_user_share_.TearDown(); |
| + } |
| + |
| + void BuildChildNodes(int n) { |
| + syncer::WriteTransaction trans(FROM_HERE, user_share()); |
| + syncer::ReadNode root(&trans); |
| + EXPECT_EQ(syncer::BaseNode::INIT_OK, |
|
Nicolas Zea
2013/05/22 22:34:02
ASSERT_EQ?
rlarocque
2013/05/23 00:39:39
Done.
|
| + root.InitByTagLookup(syncer::ModelTypeToRootTag(kType))); |
| + for (int i = 0; i < n; ++i) { |
| + syncer::WriteNode node(&trans); |
| + node.InitUniqueByCreation(kType, root, base::StringPrintf("node%05d", i)); |
| + } |
| + } |
| + |
| + GenericChangeProcessor* change_processor() { |
| + return change_processor_.get(); |
| + } |
| + |
| + syncer::UserShare* user_share() { |
| + return test_user_share_.user_share(); |
| + } |
| + |
| + private: |
| + MessageLoop loop; |
| + |
| + syncer::SyncMergeResult sync_merge_result_; |
| + base::WeakPtrFactory<syncer::SyncMergeResult> merge_result_ptr_factory_; |
| + |
| + syncer::FakeSyncableService fake_syncable_service_; |
| + base::WeakPtrFactory<syncer::FakeSyncableService> |
| + syncable_service_ptr_factory_; |
| + |
| + DataTypeErrorHandlerMock data_type_error_handler_; |
| + syncer::TestUserShare test_user_share_; |
| + |
| + scoped_ptr<GenericChangeProcessor> change_processor_; |
| +}; |
| + |
| +// This test exercises GenericChangeProcessor's GetSyncDataForType function. |
| +// It's not a great test, but, by modifying some of the parameters, you could |
| +// turn it into a micro-benchmark for model association. |
| +TEST_F(GenericChangeProcessorTest, StressGetSyncDataForType) { |
| + const int kNumChildNodes = 1000; |
| + const int kRepeatCount = 1; |
| + |
| + BuildChildNodes(kNumChildNodes); |
| + |
| + for (int i = 0; i < kRepeatCount; ++i) { |
| + syncer::SyncDataList sync_data; |
| + change_processor()->GetSyncDataForType(kType, &sync_data); |
| + |
| + // Start with a simple test. We can add more in-depth testing later. |
| + EXPECT_EQ(static_cast<size_t>(kNumChildNodes), sync_data.size()); |
| + } |
| +} |
| + |
| +} // namespace browser_sync |
| + |