Index: components/sync/model_impl/shared_model_type_processor_unittest.cc |
diff --git a/components/sync/model_impl/shared_model_type_processor_unittest.cc b/components/sync/model_impl/shared_model_type_processor_unittest.cc |
index 75abb709599ac56ba7a1d6c7d0de475cccaab413..acef48ebf7bc478eae2e5fc329ae386f1a616a36 100644 |
--- a/components/sync/model_impl/shared_model_type_processor_unittest.cc |
+++ b/components/sync/model_impl/shared_model_type_processor_unittest.cc |
@@ -54,6 +54,79 @@ SyncError CreateSyncError(SyncError::ErrorType error_type) { |
return SyncError(FROM_HERE, error_type, "TestError", PREFERENCES); |
} |
+EntitySpecifics GenerateSpecifics(const std::string& key, |
+ const std::string& value) { |
+ return FakeModelTypeService::GenerateSpecifics(key, value); |
+} |
+ |
+std::unique_ptr<EntityData> GenerateEntityData(const std::string& key, |
+ const std::string& value) { |
+ return FakeModelTypeService::GenerateEntityData(key, value); |
+} |
+ |
+class TestModelTypeService : public FakeModelTypeService { |
+ public: |
+ TestModelTypeService() |
+ : FakeModelTypeService(base::Bind(&ModelTypeChangeProcessor::Create)) {} |
+ |
+ explicit TestModelTypeService(std::unique_ptr<TestModelTypeService> other) |
+ : TestModelTypeService() { |
+ std::swap(db_, other->db_); |
+ } |
+ |
+ void OnPendingCommitDataLoaded() { |
+ DCHECK(!data_callback_.is_null()); |
+ data_callback_.Run(); |
+ data_callback_.Reset(); |
+ } |
+ |
+ void InitializeToReadyState() { |
+ if (!data_callback_.is_null()) { |
+ OnPendingCommitDataLoaded(); |
+ } |
+ } |
+ |
+ void SetInitialSyncDone(bool is_done) { |
+ ModelTypeState model_type_state(db().model_type_state()); |
+ model_type_state.set_initial_sync_done(is_done); |
+ db_->set_model_type_state(model_type_state); |
+ } |
+ |
+ int merge_call_count() const { return merge_call_count_; } |
+ |
+ // FakeModelTypeService overrides. |
+ |
+ SyncError MergeSyncData(std::unique_ptr<MetadataChangeList> mcl, |
+ EntityDataMap entity_data_map) override { |
+ merge_call_count_++; |
+ return FakeModelTypeService::MergeSyncData(std::move(mcl), entity_data_map); |
+ } |
+ |
+ void GetData(StorageKeyList keys, DataCallback callback) override { |
+ FakeModelTypeService::GetData( |
+ keys, base::Bind(&TestModelTypeService::CaptureDataCallback, |
+ base::Unretained(this), callback)); |
+ } |
+ |
+ void CheckPostConditions() override { |
+ FakeModelTypeService::CheckPostConditions(); |
+ DCHECK(data_callback_.is_null()); |
+ } |
+ |
+ private: |
+ void CaptureDataCallback(DataCallback callback, |
+ SyncError error, |
+ std::unique_ptr<DataBatch> data) { |
+ data_callback_ = base::Bind(callback, error, base::Passed(std::move(data))); |
+ } |
+ |
+ // The number of times MergeSyncData has been called. |
+ int merge_call_count_ = 0; |
+ |
+ // Stores the data callback between GetData() and OnPendingCommitDataLoaded(). |
+ base::Closure data_callback_; |
+}; |
+ |
} // namespace |
// Tests the various functionality of SharedModelTypeProcessor. |
@@ -71,38 +144,30 @@ SyncError CreateSyncError(SyncError::ErrorType error_type) { |
// storage and the correct commit requests on the worker side. |
// - Updates and commit responses from the worker correctly affect data and |
// metadata in storage on the service side. |
-class SharedModelTypeProcessorTest : public ::testing::Test, |
- public FakeModelTypeService { |
+class SharedModelTypeProcessorTest : public ::testing::Test { |
public: |
SharedModelTypeProcessorTest() |
- : FakeModelTypeService(base::Bind(&ModelTypeChangeProcessor::Create)) {} |
+ : service_(base::MakeUnique<TestModelTypeService>()) {} |
+ |
+ ~SharedModelTypeProcessorTest() override { CheckPostConditions(); } |
void InitializeToMetadataLoaded() { |
- CreateChangeProcessor(); |
- ModelTypeState model_type_state(db_.model_type_state()); |
- model_type_state.set_initial_sync_done(true); |
- db_.set_model_type_state(model_type_state); |
+ service()->SetInitialSyncDone(true); |
OnMetadataLoaded(); |
} |
// Initialize to a "ready-to-commit" state. |
void InitializeToReadyState() { |
InitializeToMetadataLoaded(); |
- if (!data_callback_.is_null()) { |
- OnPendingCommitDataLoaded(); |
- } |
+ service()->InitializeToReadyState(); |
OnSyncStarting(); |
} |
void OnMetadataLoaded() { |
- type_processor()->OnMetadataLoaded(SyncError(), db_.CreateMetadataBatch()); |
+ type_processor()->OnMetadataLoaded(SyncError(), db().CreateMetadataBatch()); |
} |
- void OnPendingCommitDataLoaded() { |
- DCHECK(!data_callback_.is_null()); |
- data_callback_.Run(); |
- data_callback_.Reset(); |
- } |
+ void OnPendingCommitDataLoaded() { service()->OnPendingCommitDataLoaded(); } |
void OnSyncStarting() { |
std::unique_ptr<DataTypeErrorHandlerMock> error_handler = |
@@ -122,16 +187,17 @@ class SharedModelTypeProcessorTest : public ::testing::Test, |
// Writes data for |key| and simulates a commit response for it. |
EntitySpecifics WriteItemAndAck(const std::string& key, |
const std::string& value) { |
- EntitySpecifics specifics = WriteItem(key, value); |
- worker()->ExpectPendingCommits({TagHashFromKey(key)}); |
+ EntitySpecifics specifics = service()->WriteItem(key, value); |
+ worker()->ExpectPendingCommits({FakeModelTypeService::TagHashFromKey(key)}); |
worker()->AckOnePendingCommit(); |
EXPECT_EQ(0U, worker()->GetNumPendingCommits()); |
return specifics; |
} |
- void ResetState() { |
- clear_change_processor(); |
- db_.Reset(); |
+ void ResetState(bool keep_db) { |
+ service_ = keep_db |
+ ? base::MakeUnique<TestModelTypeService>(std::move(service_)) |
+ : base::MakeUnique<TestModelTypeService>(); |
worker_ = nullptr; |
CheckPostConditions(); |
} |
@@ -139,33 +205,30 @@ class SharedModelTypeProcessorTest : public ::testing::Test, |
// Wipes existing DB and simulates a pending update of a server-known item. |
EntitySpecifics ResetStateWriteItem(const std::string& name, |
const std::string& value) { |
- ResetState(); |
+ ResetState(false); |
InitializeToReadyState(); |
EXPECT_EQ(0U, ProcessorEntityCount()); |
WriteItemAndAck(name, "acked-value"); |
- EntitySpecifics specifics = WriteItem(name, value); |
+ EntitySpecifics specifics = service()->WriteItem(name, value); |
EXPECT_EQ(1U, ProcessorEntityCount()); |
- clear_change_processor(); |
- worker_ = nullptr; |
+ ResetState(true); |
return specifics; |
} |
// Wipes existing DB and simulates a pending deletion of a server-known item. |
void ResetStateDeleteItem(const std::string& name, const std::string& value) { |
- ResetState(); |
+ ResetState(false); |
InitializeToReadyState(); |
EXPECT_EQ(0U, ProcessorEntityCount()); |
WriteItemAndAck(name, value); |
EXPECT_EQ(1U, ProcessorEntityCount()); |
- DeleteItem(name); |
+ service()->DeleteItem(name); |
EXPECT_EQ(1U, ProcessorEntityCount()); |
- clear_change_processor(); |
- worker_ = nullptr; |
+ ResetState(true); |
} |
// Return the number of entities the processor has metadata for. |
size_t ProcessorEntityCount() const { |
- DCHECK(type_processor()); |
return type_processor()->entities_.size(); |
} |
@@ -176,23 +239,24 @@ class SharedModelTypeProcessorTest : public ::testing::Test, |
expected_start_error_ = error_type; |
} |
- MockModelTypeWorker* worker() { return worker_; } |
+ TestModelTypeService* service() const { return service_.get(); } |
+ |
+ const FakeModelTypeService::Store& db() const { return service()->db(); } |
+ |
+ MockModelTypeWorker* worker() const { return worker_; } |
SharedModelTypeProcessor* type_processor() const { |
- return static_cast<SharedModelTypeProcessor*>(change_processor()); |
+ return static_cast<SharedModelTypeProcessor*>( |
+ service()->change_processor()); |
} |
- DataTypeErrorHandlerMock* error_handler() { |
+ DataTypeErrorHandlerMock* error_handler() const { |
DCHECK(error_handler_); |
return error_handler_; |
} |
- int merge_call_count() const { return merge_call_count_; } |
- |
private: |
- void CheckPostConditions() override { |
- FakeModelTypeService::CheckPostConditions(); |
- DCHECK(data_callback_.is_null()); |
+ void CheckPostConditions() { |
DCHECK_EQ(SyncError::UNSET, expected_start_error_); |
} |
@@ -216,25 +280,7 @@ class SharedModelTypeProcessorTest : public ::testing::Test, |
type_processor()->ConnectSync(std::move(worker)); |
} |
- // FakeModelTypeService overrides. |
- |
- SyncError MergeSyncData(std::unique_ptr<MetadataChangeList> mcl, |
- EntityDataMap entity_data_map) override { |
- merge_call_count_++; |
- return FakeModelTypeService::MergeSyncData(std::move(mcl), entity_data_map); |
- } |
- |
- void CaptureDataCallback(DataCallback callback, |
- SyncError error, |
- std::unique_ptr<DataBatch> data) { |
- data_callback_ = base::Bind(callback, error, base::Passed(std::move(data))); |
- } |
- |
- void GetData(StorageKeyList keys, DataCallback callback) override { |
- FakeModelTypeService::GetData( |
- keys, base::Bind(&SharedModelTypeProcessorTest::CaptureDataCallback, |
- base::Unretained(this), callback)); |
- } |
+ std::unique_ptr<TestModelTypeService> service_; |
// This sets ThreadTaskRunnerHandle on the current thread, which the type |
// processor will pick up as the sync task runner. |
@@ -243,27 +289,20 @@ class SharedModelTypeProcessorTest : public ::testing::Test, |
// The current mock queue, which is owned by |type_processor()|. |
MockModelTypeWorker* worker_; |
- // Stores the data callback between GetData() and OnPendingCommitDataLoaded(). |
- base::Closure data_callback_; |
- |
// The processor's error handler. |
DataTypeErrorHandlerMock* error_handler_; |
// The error to expect in OnReadyToConnect(). |
SyncError::ErrorType expected_start_error_ = SyncError::UNSET; |
- |
- // The number of times MergeSyncData has been called. |
- int merge_call_count_ = 0; |
}; |
// Test that an initial sync handles local and remote items properly. |
TEST_F(SharedModelTypeProcessorTest, InitialSync) { |
- CreateChangeProcessor(); |
OnMetadataLoaded(); |
OnSyncStarting(); |
// Local write before initial sync. |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
// Has data, but no metadata, entity in the processor, or commit request. |
EXPECT_EQ(1U, db().data_count()); |
@@ -271,10 +310,10 @@ TEST_F(SharedModelTypeProcessorTest, InitialSync) { |
EXPECT_EQ(0U, ProcessorEntityCount()); |
EXPECT_EQ(0U, worker()->GetNumPendingCommits()); |
- EXPECT_EQ(0, merge_call_count()); |
+ EXPECT_EQ(0, service()->merge_call_count()); |
// Initial sync with one server item. |
worker()->UpdateFromServer(kHash2, GenerateSpecifics(kKey2, kValue2)); |
- EXPECT_EQ(1, merge_call_count()); |
+ EXPECT_EQ(1, service()->merge_call_count()); |
// Now have data and metadata for both items, as well as a commit request for |
// the local item. |
@@ -292,40 +331,37 @@ TEST_F(SharedModelTypeProcessorTest, NonInitialSync) { |
InitializeToMetadataLoaded(); |
// Write an item before sync connects. |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
EXPECT_EQ(1U, db().data_count()); |
EXPECT_EQ(1U, db().metadata_count()); |
// Check that data coming from sync is treated as a normal GetUpdates. |
OnSyncStarting(); |
worker()->UpdateFromServer(kHash2, GenerateSpecifics(kKey2, kValue2)); |
- EXPECT_EQ(0, merge_call_count()); |
+ EXPECT_EQ(0, service()->merge_call_count()); |
EXPECT_EQ(2U, db().data_count()); |
EXPECT_EQ(2U, db().metadata_count()); |
} |
// Test that an error during the merge is propagated to the error handler. |
TEST_F(SharedModelTypeProcessorTest, InitialSyncError) { |
- CreateChangeProcessor(); |
OnMetadataLoaded(); |
OnSyncStarting(); |
- SetServiceError(SyncError::DATATYPE_ERROR); |
+ service()->SetServiceError(SyncError::DATATYPE_ERROR); |
error_handler()->ExpectError(SyncError::DATATYPE_ERROR); |
worker()->UpdateFromServer(); |
} |
// Test that errors before it's called are passed to |start_callback| correctly. |
TEST_F(SharedModelTypeProcessorTest, StartErrors) { |
- CreateChangeProcessor(); |
type_processor()->OnMetadataLoaded(CreateSyncError(SyncError::DATATYPE_ERROR), |
nullptr); |
ExpectStartError(SyncError::DATATYPE_ERROR); |
OnSyncStarting(); |
// Test OnSyncStarting happening first. |
- ResetState(); |
- CreateChangeProcessor(); |
+ ResetState(false); |
OnSyncStarting(); |
ExpectStartError(SyncError::DATATYPE_ERROR); |
type_processor()->OnMetadataLoaded(CreateSyncError(SyncError::DATATYPE_ERROR), |
@@ -333,7 +369,7 @@ TEST_F(SharedModelTypeProcessorTest, StartErrors) { |
// Test an error loading pending data. |
ResetStateWriteItem(kKey1, kValue1); |
- SetServiceError(SyncError::DATATYPE_ERROR); |
+ service()->SetServiceError(SyncError::DATATYPE_ERROR); |
InitializeToMetadataLoaded(); |
OnPendingCommitDataLoaded(); |
ExpectStartError(SyncError::DATATYPE_ERROR); |
@@ -373,7 +409,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
InitializeToMetadataLoaded(); |
OnPendingCommitDataLoaded(); |
OnSyncStarting(); |
- EntitySpecifics specifics4 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics4 = service()->WriteItem(kKey1, kValue2); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics3); |
worker()->ExpectNthPendingCommit(1, kHash1, specifics4); |
@@ -382,7 +418,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
OnPendingCommitDataLoaded(); |
- EntitySpecifics specifics5 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics5 = service()->WriteItem(kKey1, kValue2); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics5); |
@@ -392,7 +428,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
OnPendingCommitDataLoaded(); |
- EntitySpecifics specifics7 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics7 = service()->WriteItem(kKey1, kValue2); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics6); |
worker()->ExpectNthPendingCommit(1, kHash1, specifics7); |
@@ -401,7 +437,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
- EntitySpecifics specifics8 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics8 = service()->WriteItem(kKey1, kValue2); |
EXPECT_EQ(nullptr, worker()); |
OnPendingCommitDataLoaded(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
@@ -410,7 +446,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
// Put, data, connect. |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- EntitySpecifics specifics9 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics9 = service()->WriteItem(kKey1, kValue2); |
OnPendingCommitDataLoaded(); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
@@ -419,7 +455,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
// Put, connect, data. |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- EntitySpecifics specifics10 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics10 = service()->WriteItem(kKey1, kValue2); |
OnSyncStarting(); |
EXPECT_EQ(nullptr, worker()); |
OnPendingCommitDataLoaded(); |
@@ -431,7 +467,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
InitializeToMetadataLoaded(); |
OnPendingCommitDataLoaded(); |
OnSyncStarting(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics11); |
worker()->ExpectNthPendingCommit(1, kHash1, kEmptySpecifics); |
@@ -440,7 +476,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
OnPendingCommitDataLoaded(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, kEmptySpecifics); |
@@ -450,7 +486,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
OnPendingCommitDataLoaded(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics12); |
worker()->ExpectNthPendingCommit(1, kHash1, kEmptySpecifics); |
@@ -459,7 +495,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(nullptr, worker()); |
OnPendingCommitDataLoaded(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
@@ -468,7 +504,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
// Delete, data, connect. |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
OnPendingCommitDataLoaded(); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
@@ -477,7 +513,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingCommit) { |
// Delete, connect, data. |
ResetStateWriteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
OnSyncStarting(); |
EXPECT_EQ(nullptr, worker()); |
OnPendingCommitDataLoaded(); |
@@ -508,7 +544,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingDelete) { |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
- EntitySpecifics specifics1 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics1 = service()->WriteItem(kKey1, kValue2); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, kEmptySpecifics); |
worker()->ExpectNthPendingCommit(1, kHash1, specifics1); |
@@ -516,7 +552,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingDelete) { |
// Put, connect. |
ResetStateDeleteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- EntitySpecifics specifics2 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics2 = service()->WriteItem(kKey1, kValue2); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, specifics2); |
@@ -526,7 +562,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingDelete) { |
InitializeToMetadataLoaded(); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, kEmptySpecifics); |
worker()->ExpectNthPendingCommit(1, kHash1, kEmptySpecifics); |
@@ -534,7 +570,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingDelete) { |
// Delete, connect. |
ResetStateDeleteItem(kKey1, kValue1); |
InitializeToMetadataLoaded(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
OnSyncStarting(); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
worker()->ExpectNthPendingCommit(0, kHash1, kEmptySpecifics); |
@@ -544,7 +580,7 @@ TEST_F(SharedModelTypeProcessorTest, LoadPendingDelete) { |
TEST_F(SharedModelTypeProcessorTest, LoadCommited) { |
InitializeToReadyState(); |
WriteItemAndAck(kKey1, kValue1); |
- clear_change_processor(); |
+ ResetState(true); |
// Test that a new processor loads the metadata without committing. |
InitializeToReadyState(); |
@@ -558,7 +594,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalCreateItem) { |
InitializeToReadyState(); |
EXPECT_EQ(0U, worker()->GetNumPendingCommits()); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
// Verify the commit request this operation has triggered. |
worker()->ExpectPendingCommits({kHash1}); |
@@ -600,8 +636,8 @@ TEST_F(SharedModelTypeProcessorTest, LocalCreateItem) { |
// propagated to the error handler. |
TEST_F(SharedModelTypeProcessorTest, ErrorApplyingAck) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
- SetServiceError(SyncError::DATATYPE_ERROR); |
+ service()->WriteItem(kKey1, kValue1); |
+ service()->SetServiceError(SyncError::DATATYPE_ERROR); |
error_handler()->ExpectError(SyncError::DATATYPE_ERROR); |
worker()->AckOnePendingCommit(); |
} |
@@ -622,7 +658,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemWithOverrides) { |
entity_data->non_unique_name = kKey1; |
entity_data->client_tag_hash = kHash3; |
entity_data->id = kId1; |
- WriteItem(kKey1, std::move(entity_data)); |
+ service()->WriteItem(kKey1, std::move(entity_data)); |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |
ASSERT_FALSE(worker()->HasPendingCommitForHash(kHash3)); |
@@ -647,7 +683,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemWithOverrides) { |
entity_data->client_tag_hash = kHash3; |
// Make sure ID isn't overwritten either. |
entity_data->id = kId2; |
- WriteItem(kKey1, std::move(entity_data)); |
+ service()->WriteItem(kKey1, std::move(entity_data)); |
EXPECT_EQ(2U, worker()->GetNumPendingCommits()); |
ASSERT_FALSE(worker()->HasPendingCommitForHash(kHash3)); |
@@ -672,7 +708,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemWithOverrides) { |
TEST_F(SharedModelTypeProcessorTest, LocalUpdateItem) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
EXPECT_EQ(1U, db().metadata_count()); |
worker()->ExpectPendingCommits({kHash1}); |
@@ -681,7 +717,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalUpdateItem) { |
const EntityData& data_v1 = request_data_v1.entity.value(); |
const EntityMetadata metadata_v1 = db().GetMetadata(kKey1); |
- WriteItem(kKey1, kValue2); |
+ service()->WriteItem(kKey1, kValue2); |
EXPECT_EQ(1U, db().metadata_count()); |
worker()->ExpectPendingCommits({kHash1, kHash1}); |
@@ -724,11 +760,11 @@ TEST_F(SharedModelTypeProcessorTest, LocalUpdateItem) { |
// commit request. |
TEST_F(SharedModelTypeProcessorTest, LocalUpdateItemRedundant) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
EXPECT_EQ(1U, db().metadata_count()); |
worker()->ExpectPendingCommits({kHash1}); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
worker()->ExpectPendingCommits({kHash1}); |
} |
@@ -766,7 +802,7 @@ TEST_F(SharedModelTypeProcessorTest, ServerCreateItem) { |
// propagated to the error handler. |
TEST_F(SharedModelTypeProcessorTest, ErrorApplyingUpdate) { |
InitializeToReadyState(); |
- SetServiceError(SyncError::DATATYPE_ERROR); |
+ service()->SetServiceError(SyncError::DATATYPE_ERROR); |
error_handler()->ExpectError(SyncError::DATATYPE_ERROR); |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue1)); |
} |
@@ -804,7 +840,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalDeleteItem) { |
EXPECT_EQ(1, metadata_v1.acked_sequence_number()); |
EXPECT_EQ(1, metadata_v1.server_version()); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(0U, db().data_count()); |
// Metadata is not removed until the commit response comes back. |
EXPECT_EQ(1U, db().metadata_count()); |
@@ -827,7 +863,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalDeleteItem) { |
// response, then getting the commit responses. |
TEST_F(SharedModelTypeProcessorTest, LocalDeleteItemInterleaved) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
worker()->ExpectPendingCommits({kHash1}); |
const CommitRequestData& data_v1 = |
worker()->GetLatestPendingCommitForHash(kHash1); |
@@ -838,7 +874,7 @@ TEST_F(SharedModelTypeProcessorTest, LocalDeleteItemInterleaved) { |
EXPECT_EQ(0, metadata_v1.acked_sequence_number()); |
EXPECT_EQ(kUncommittedVersion, metadata_v1.server_version()); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(0U, db().data_count()); |
EXPECT_EQ(1U, db().metadata_count()); |
EXPECT_EQ(1U, ProcessorEntityCount()); |
@@ -895,7 +931,7 @@ TEST_F(SharedModelTypeProcessorTest, ServerDeleteItem) { |
// Should have no effect and not crash. |
TEST_F(SharedModelTypeProcessorTest, LocalDeleteUnknown) { |
InitializeToReadyState(); |
- DeleteItem(kKey1); |
+ service()->DeleteItem(kKey1); |
EXPECT_EQ(0U, db().data_count()); |
EXPECT_EQ(0U, db().metadata_count()); |
EXPECT_EQ(0U, ProcessorEntityCount()); |
@@ -919,7 +955,7 @@ TEST_F(SharedModelTypeProcessorTest, TwoIndependentItems) { |
InitializeToReadyState(); |
EXPECT_EQ(0U, worker()->GetNumPendingCommits()); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
EXPECT_EQ(1U, db().data_count()); |
EXPECT_EQ(1U, db().metadata_count()); |
const EntityMetadata metadata1 = db().GetMetadata(kKey1); |
@@ -927,7 +963,7 @@ TEST_F(SharedModelTypeProcessorTest, TwoIndependentItems) { |
// There should be one commit request for this item only. |
worker()->ExpectPendingCommits({kHash1}); |
- WriteItem(kKey2, kValue2); |
+ service()->WriteItem(kKey2, kValue2); |
EXPECT_EQ(2U, db().data_count()); |
EXPECT_EQ(2U, db().metadata_count()); |
const EntityMetadata metadata2 = db().GetMetadata(kKey2); |
@@ -948,7 +984,7 @@ TEST_F(SharedModelTypeProcessorTest, TwoIndependentItems) { |
TEST_F(SharedModelTypeProcessorTest, ConflictResolutionChangesMatch) { |
InitializeToReadyState(); |
- EntitySpecifics specifics = WriteItem(kKey1, kValue1); |
+ EntitySpecifics specifics = service()->WriteItem(kKey1, kValue1); |
EXPECT_EQ(1U, db().data_change_count()); |
EXPECT_EQ(kValue1, db().GetValue(kKey1)); |
EXPECT_EQ(1U, db().metadata_change_count()); |
@@ -967,8 +1003,8 @@ TEST_F(SharedModelTypeProcessorTest, ConflictResolutionChangesMatch) { |
TEST_F(SharedModelTypeProcessorTest, ConflictResolutionUseLocal) { |
InitializeToReadyState(); |
- EntitySpecifics specifics = WriteItem(kKey1, kValue1); |
- SetConflictResolution(ConflictResolution::UseLocal()); |
+ EntitySpecifics specifics = service()->WriteItem(kKey1, kValue1); |
+ service()->SetConflictResolution(ConflictResolution::UseLocal()); |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue2)); |
@@ -982,8 +1018,8 @@ TEST_F(SharedModelTypeProcessorTest, ConflictResolutionUseLocal) { |
TEST_F(SharedModelTypeProcessorTest, ConflictResolutionUseRemote) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
- SetConflictResolution(ConflictResolution::UseRemote()); |
+ service()->WriteItem(kKey1, kValue1); |
+ service()->SetConflictResolution(ConflictResolution::UseRemote()); |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue2)); |
// Updated client data and metadata; no new commit request. |
@@ -996,8 +1032,8 @@ TEST_F(SharedModelTypeProcessorTest, ConflictResolutionUseRemote) { |
TEST_F(SharedModelTypeProcessorTest, ConflictResolutionUseNew) { |
InitializeToReadyState(); |
- WriteItem(kKey1, kValue1); |
- SetConflictResolution( |
+ service()->WriteItem(kKey1, kValue1); |
+ service()->SetConflictResolution( |
ConflictResolution::UseNew(GenerateEntityData(kKey1, kValue3))); |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue2)); |
@@ -1021,13 +1057,13 @@ TEST_F(SharedModelTypeProcessorTest, Disconnect) { |
WriteItemAndAck(kKey1, kValue1); |
// The second item has a commit request in progress. |
- WriteItem(kKey2, kValue2); |
+ service()->WriteItem(kKey2, kValue2); |
EXPECT_TRUE(worker()->HasPendingCommitForHash(kHash2)); |
DisconnectSync(); |
// The third item is added after stopping. |
- WriteItem(kKey3, kValue3); |
+ service()->WriteItem(kKey3, kValue3); |
// Reconnect. |
OnSyncStarting(); |
@@ -1056,19 +1092,19 @@ TEST_F(SharedModelTypeProcessorTest, Disable) { |
WriteItemAndAck(kKey1, kValue1); |
// The second item has a commit request in progress. |
- WriteItem(kKey2, kValue2); |
+ service()->WriteItem(kKey2, kValue2); |
EXPECT_TRUE(worker()->HasPendingCommitForHash(kHash2)); |
- DisableSync(); |
+ service()->DisableSync(); |
+ EXPECT_FALSE(type_processor()->IsTrackingMetadata()); |
// The third item is added after disable. |
- WriteItem(kKey3, kValue3); |
+ service()->WriteItem(kKey3, kValue3); |
// Now we re-enable. |
- CreateChangeProcessor(); |
- OnMetadataLoaded(); |
OnSyncStarting(); |
worker()->UpdateFromServer(); |
+ EXPECT_TRUE(type_processor()->IsTrackingMetadata()); |
// Once we're ready to commit, all three local items should consider |
// themselves uncommitted and pending for commit. |
@@ -1082,7 +1118,7 @@ TEST_F(SharedModelTypeProcessorTest, ReEncryptCommitsWithNewKey) { |
// Commit an item. |
EntitySpecifics specifics1 = WriteItemAndAck(kKey1, kValue1); |
// Create another item and don't wait for its commit response. |
- EntitySpecifics specifics2 = WriteItem(kKey2, kValue2); |
+ EntitySpecifics specifics2 = service()->WriteItem(kKey2, kValue2); |
worker()->ExpectPendingCommits({kHash2}); |
EXPECT_EQ(1U, db().GetMetadata(kKey1).sequence_number()); |
EXPECT_EQ(1U, db().GetMetadata(kKey2).sequence_number()); |
@@ -1107,7 +1143,7 @@ TEST_F(SharedModelTypeProcessorTest, ReEncryptCommitsWithNewKey) { |
TEST_F(SharedModelTypeProcessorTest, ReEncryptErrorLoadingData) { |
InitializeToReadyState(); |
WriteItemAndAck(kKey1, kValue1); |
- SetServiceError(SyncError::DATATYPE_ERROR); |
+ service()->SetServiceError(SyncError::DATATYPE_ERROR); |
worker()->UpdateWithEncryptionKey("k1"); |
error_handler()->ExpectError(SyncError::DATATYPE_ERROR); |
OnPendingCommitDataLoaded(); |
@@ -1154,10 +1190,10 @@ TEST_F(SharedModelTypeProcessorTest, ReEncryptUpdatesWithNewKey) { |
TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseLocal) { |
InitializeToReadyState(); |
worker()->UpdateWithEncryptionKey("k1"); |
- EntitySpecifics specifics = WriteItem(kKey1, kValue1); |
+ EntitySpecifics specifics = service()->WriteItem(kKey1, kValue1); |
worker()->ExpectPendingCommits({kHash1}); |
- SetConflictResolution(ConflictResolution::UseLocal()); |
+ service()->SetConflictResolution(ConflictResolution::UseLocal()); |
// Unencrypted update needs to be re-commited with key k1. |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue2), 1, ""); |
@@ -1171,9 +1207,9 @@ TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseLocal) { |
TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseRemote) { |
InitializeToReadyState(); |
worker()->UpdateWithEncryptionKey("k1"); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
- SetConflictResolution(ConflictResolution::UseRemote()); |
+ service()->SetConflictResolution(ConflictResolution::UseRemote()); |
// Unencrypted update needs to be re-commited with key k1. |
EntitySpecifics specifics = GenerateSpecifics(kKey1, kValue2); |
worker()->UpdateFromServer(kHash1, specifics, 1, ""); |
@@ -1188,9 +1224,9 @@ TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseRemote) { |
TEST_F(SharedModelTypeProcessorTest, ReEncryptConflictResolutionUseNew) { |
InitializeToReadyState(); |
worker()->UpdateWithEncryptionKey("k1"); |
- WriteItem(kKey1, kValue1); |
+ service()->WriteItem(kKey1, kValue1); |
- SetConflictResolution( |
+ service()->SetConflictResolution( |
ConflictResolution::UseNew(GenerateEntityData(kKey1, kValue3))); |
// Unencrypted update needs to be re-commited with key k1. |
worker()->UpdateFromServer(kHash1, GenerateSpecifics(kKey1, kValue2), 1, ""); |
@@ -1242,7 +1278,7 @@ TEST_F(SharedModelTypeProcessorTest, IgnoreRemoteEncryption) { |
InitializeToReadyState(); |
EntitySpecifics specifics1 = WriteItemAndAck(kKey1, kValue1); |
- EntitySpecifics specifics2 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics2 = service()->WriteItem(kKey1, kValue2); |
UpdateResponseDataList update; |
update.push_back(worker()->GenerateUpdateData(kHash1, specifics1, 1, "k1")); |
worker()->UpdateWithEncryptionKey("k1", update); |
@@ -1254,8 +1290,8 @@ TEST_F(SharedModelTypeProcessorTest, IgnoreRemoteEncryption) { |
// Same as above but with two commit requests before one ack. |
TEST_F(SharedModelTypeProcessorTest, IgnoreRemoteEncryptionInterleaved) { |
InitializeToReadyState(); |
- EntitySpecifics specifics1 = WriteItem(kKey1, kValue1); |
- EntitySpecifics specifics2 = WriteItem(kKey1, kValue2); |
+ EntitySpecifics specifics1 = service()->WriteItem(kKey1, kValue1); |
+ EntitySpecifics specifics2 = service()->WriteItem(kKey1, kValue2); |
worker()->AckOnePendingCommit(); |
// kValue1 is now the base value. |
EXPECT_EQ(1U, worker()->GetNumPendingCommits()); |