diff options
Diffstat (limited to 'sync/engine/model_type_sync_proxy_impl_unittest.cc')
-rw-r--r-- | sync/engine/model_type_sync_proxy_impl_unittest.cc | 234 |
1 files changed, 4 insertions, 230 deletions
diff --git a/sync/engine/model_type_sync_proxy_impl_unittest.cc b/sync/engine/model_type_sync_proxy_impl_unittest.cc index 581d511..0597657 100644 --- a/sync/engine/model_type_sync_proxy_impl_unittest.cc +++ b/sync/engine/model_type_sync_proxy_impl_unittest.cc @@ -77,22 +77,6 @@ class ModelTypeSyncProxyImplTest : public ::testing::Test { const std::string& value); void TombstoneFromServer(int64 version_offset, const std::string& tag); - // Emulate the receipt of pending updates from the server. - // Pending updates are usually caused by a temporary decryption failure. - void PendingUpdateFromServer(int64 version_offset, - const std::string& tag, - const std::string& value, - const std::string& key_name); - - // Returns true if the proxy has an pending update with specified tag. - bool HasPendingUpdate(const std::string& tag) const; - - // Returns the pending update with the specified tag. - UpdateResponseData GetPendingUpdate(const std::string& tag) const; - - // Returns the number of pending updates. - size_t GetNumPendingUpdates() const; - // Read emitted commit requests as batches. size_t GetNumCommitRequestLists(); CommitRequestDataList GetNthCommitRequestList(size_t n); @@ -104,22 +88,10 @@ class ModelTypeSyncProxyImplTest : public ::testing::Test { // Sends the type sync proxy a successful commit response. void SuccessfulCommitResponse(const CommitRequestData& request_data); - // Sends the type sync proxy an updated DataTypeState to let it know that - // the desired encryption key has changed. - void UpdateDesiredEncryptionKey(const std::string& key_name); - - // Sets the key_name that the mock ModelTypeSyncWorker will claim is in use - // when receiving items. - void SetServerEncryptionKey(const std::string& key_name); - private: static std::string GenerateTagHash(const std::string& tag); static sync_pb::EntitySpecifics GenerateSpecifics(const std::string& tag, const std::string& value); - static sync_pb::EntitySpecifics GenerateEncryptedSpecifics( - const std::string& tag, - const std::string& value, - const std::string& key_name); int64 GetServerVersion(const std::string& tag); void SetServerVersion(const std::string& tag, int64 version); @@ -169,7 +141,7 @@ void ModelTypeSyncProxyImplTest::Disable() { void ModelTypeSyncProxyImplTest::ReEnable() { DCHECK(!type_sync_proxy_->IsConnected()); - // Prepare a new MockModelTypeSyncWorker instance, just as we would + // Prepare a new NonBlockingTypeProcesorCore instance, just as we would // if this happened in the real world. mock_worker_ = new MockModelTypeSyncWorker(); injectable_sync_context_proxy_.reset( @@ -193,8 +165,7 @@ void ModelTypeSyncProxyImplTest::OnInitialSyncDone() { data_type_state_.initial_sync_done = true; UpdateResponseDataList empty_update_list; - type_sync_proxy_->OnUpdateReceived( - data_type_state_, empty_update_list, empty_update_list); + type_sync_proxy_->OnUpdateReceived(data_type_state_, empty_update_list); } void ModelTypeSyncProxyImplTest::UpdateFromServer(int64 version_offset, @@ -206,25 +177,7 @@ void ModelTypeSyncProxyImplTest::UpdateFromServer(int64 version_offset, UpdateResponseDataList list; list.push_back(data); - type_sync_proxy_->OnUpdateReceived( - data_type_state_, list, UpdateResponseDataList()); -} - -void ModelTypeSyncProxyImplTest::PendingUpdateFromServer( - int64 version_offset, - const std::string& tag, - const std::string& value, - const std::string& key_name) { - const std::string tag_hash = GenerateTagHash(tag); - UpdateResponseData data = mock_worker_->UpdateFromServer( - version_offset, - tag_hash, - GenerateEncryptedSpecifics(tag, value, key_name)); - - UpdateResponseDataList list; - list.push_back(data); - type_sync_proxy_->OnUpdateReceived( - data_type_state_, UpdateResponseDataList(), list); + type_sync_proxy_->OnUpdateReceived(data_type_state_, list); } void ModelTypeSyncProxyImplTest::TombstoneFromServer(int64 version_offset, @@ -237,40 +190,7 @@ void ModelTypeSyncProxyImplTest::TombstoneFromServer(int64 version_offset, UpdateResponseDataList list; list.push_back(data); - type_sync_proxy_->OnUpdateReceived( - data_type_state_, list, UpdateResponseDataList()); -} - -bool ModelTypeSyncProxyImplTest::HasPendingUpdate( - const std::string& tag) const { - const std::string client_tag_hash = GenerateTagHash(tag); - const UpdateResponseDataList list = type_sync_proxy_->GetPendingUpdates(); - for (UpdateResponseDataList::const_iterator it = list.begin(); - it != list.end(); - ++it) { - if (it->client_tag_hash == client_tag_hash) - return true; - } - return false; -} - -UpdateResponseData ModelTypeSyncProxyImplTest::GetPendingUpdate( - const std::string& tag) const { - DCHECK(HasPendingUpdate(tag)); - const std::string client_tag_hash = GenerateTagHash(tag); - const UpdateResponseDataList list = type_sync_proxy_->GetPendingUpdates(); - for (UpdateResponseDataList::const_iterator it = list.begin(); - it != list.end(); - ++it) { - if (it->client_tag_hash == client_tag_hash) - return *it; - } - NOTREACHED(); - return UpdateResponseData(); -} - -size_t ModelTypeSyncProxyImplTest::GetNumPendingUpdates() const { - return type_sync_proxy_->GetPendingUpdates().size(); + type_sync_proxy_->OnUpdateReceived(data_type_state_, list); } void ModelTypeSyncProxyImplTest::SuccessfulCommitResponse( @@ -280,18 +200,6 @@ void ModelTypeSyncProxyImplTest::SuccessfulCommitResponse( type_sync_proxy_->OnCommitCompleted(data_type_state_, list); } -void ModelTypeSyncProxyImplTest::UpdateDesiredEncryptionKey( - const std::string& key_name) { - data_type_state_.encryption_key_name = key_name; - type_sync_proxy_->OnUpdateReceived( - data_type_state_, UpdateResponseDataList(), UpdateResponseDataList()); -} - -void ModelTypeSyncProxyImplTest::SetServerEncryptionKey( - const std::string& key_name) { - mock_worker_->SetServerEncryptionKey(key_name); -} - std::string ModelTypeSyncProxyImplTest::GenerateTagHash( const std::string& tag) { return syncable::GenerateSyncableHash(kModelType, tag); @@ -306,19 +214,6 @@ sync_pb::EntitySpecifics ModelTypeSyncProxyImplTest::GenerateSpecifics( return specifics; } -// These tests never decrypt anything, so we can get away with faking the -// encryption for now. -sync_pb::EntitySpecifics ModelTypeSyncProxyImplTest::GenerateEncryptedSpecifics( - const std::string& tag, - const std::string& value, - const std::string& key_name) { - sync_pb::EntitySpecifics specifics; - AddDefaultFieldValue(kModelType, &specifics); - specifics.mutable_encrypted()->set_key_name(key_name); - specifics.mutable_encrypted()->set_blob("BLOB" + key_name); - return specifics; -} - size_t ModelTypeSyncProxyImplTest::GetNumCommitRequestLists() { return mock_worker_->GetNumCommitRequestLists(); } @@ -565,125 +460,4 @@ TEST_F(ModelTypeSyncProxyImplTest, Disable) { EXPECT_TRUE(HasCommitRequestForTag("tag3")); } -// Test receipt of pending updates. -TEST_F(ModelTypeSyncProxyImplTest, ReceivePendingUpdates) { - EXPECT_FALSE(HasPendingUpdate("tag1")); - EXPECT_EQ(0U, GetNumPendingUpdates()); - - // Receive a pending update. - PendingUpdateFromServer(5, "tag1", "value1", "key1"); - EXPECT_EQ(1U, GetNumPendingUpdates()); - ASSERT_TRUE(HasPendingUpdate("tag1")); - UpdateResponseData data1 = GetPendingUpdate("tag1"); - EXPECT_EQ(5, data1.response_version); - - // Receive an updated version of a pending update. - // It should overwrite the existing item. - PendingUpdateFromServer(10, "tag1", "value15", "key1"); - EXPECT_EQ(1U, GetNumPendingUpdates()); - ASSERT_TRUE(HasPendingUpdate("tag1")); - UpdateResponseData data2 = GetPendingUpdate("tag1"); - EXPECT_EQ(15, data2.response_version); - - // Receive a stale version of a pending update. - // It should have no effect. - PendingUpdateFromServer(-3, "tag1", "value12", "key1"); - EXPECT_EQ(1U, GetNumPendingUpdates()); - ASSERT_TRUE(HasPendingUpdate("tag1")); - UpdateResponseData data3 = GetPendingUpdate("tag1"); - EXPECT_EQ(15, data3.response_version); -} - -// Test that Disable clears pending update state. -TEST_F(ModelTypeSyncProxyImplTest, DisableWithPendingUpdates) { - PendingUpdateFromServer(5, "tag1", "value1", "key1"); - EXPECT_EQ(1U, GetNumPendingUpdates()); - ASSERT_TRUE(HasPendingUpdate("tag1")); - - Disable(); - ReEnable(); - - EXPECT_EQ(0U, GetNumPendingUpdates()); - EXPECT_FALSE(HasPendingUpdate("tag1")); -} - -// Test that Disconnect does not clear pending update state. -TEST_F(ModelTypeSyncProxyImplTest, DisconnectWithPendingUpdates) { - PendingUpdateFromServer(5, "tag1", "value1", "key1"); - EXPECT_EQ(1U, GetNumPendingUpdates()); - ASSERT_TRUE(HasPendingUpdate("tag1")); - - Disconnect(); - ReEnable(); - - EXPECT_EQ(1U, GetNumPendingUpdates()); - EXPECT_TRUE(HasPendingUpdate("tag1")); -} - -// Test re-encrypt everything when desired encryption key changes. -TEST_F(ModelTypeSyncProxyImplTest, ReEncryptCommitsWithNewKey) { - InitializeToReadyState(); - - // Commit an item. - WriteItem("tag1", "value1"); - ASSERT_TRUE(HasCommitRequestForTag("tag1")); - const CommitRequestData& tag1_v1_data = GetLatestCommitRequestForTag("tag1"); - SuccessfulCommitResponse(tag1_v1_data); - - // Create another item and don't wait for its commit response. - WriteItem("tag2", "value2"); - - ASSERT_EQ(2U, GetNumCommitRequestLists()); - - // Receive notice that the account's desired encryption key has changed. - UpdateDesiredEncryptionKey("k1"); - - // That should trigger a new commit request. - ASSERT_EQ(3U, GetNumCommitRequestLists()); - EXPECT_EQ(2U, GetNthCommitRequestList(2).size()); - - const CommitRequestData& tag1_enc = GetLatestCommitRequestForTag("tag1"); - const CommitRequestData& tag2_enc = GetLatestCommitRequestForTag("tag2"); - - SuccessfulCommitResponse(tag1_enc); - SuccessfulCommitResponse(tag2_enc); - - // And that should be the end of it. - ASSERT_EQ(3U, GetNumCommitRequestLists()); -} - -// Test receipt of updates with new and old keys. -TEST_F(ModelTypeSyncProxyImplTest, ReEncryptUpdatesWithNewKey) { - InitializeToReadyState(); - - // Receive an unencrpted update. - UpdateFromServer(5, "no_enc", "value1"); - - ASSERT_EQ(0U, GetNumCommitRequestLists()); - - // Set desired encryption key to k2 to force updates to some items. - UpdateDesiredEncryptionKey("k2"); - - ASSERT_EQ(1U, GetNumCommitRequestLists()); - EXPECT_EQ(1U, GetNthCommitRequestList(0).size()); - EXPECT_TRUE(HasCommitRequestForTag("no_enc")); - - // Receive an update that was encrypted with key k1. - SetServerEncryptionKey("k1"); - UpdateFromServer(10, "enc_k1", "value1"); - - // Receipt of updates encrypted with old key also forces a re-encrypt commit. - ASSERT_EQ(2U, GetNumCommitRequestLists()); - EXPECT_EQ(1U, GetNthCommitRequestList(1).size()); - EXPECT_TRUE(HasCommitRequestForTag("enc_k1")); - - // Receive an update that was encrypted with key k2. - SetServerEncryptionKey("k2"); - UpdateFromServer(15, "enc_k2", "value1"); - - // That was the correct key, so no re-encryption is required. - EXPECT_EQ(2U, GetNumCommitRequestLists()); - EXPECT_FALSE(HasCommitRequestForTag("enc_k2")); -} - } // namespace syncer |