Chromium Code Reviews| Index: components/sync/engine_impl/loopback_server/loopback_server_unittest.cc |
| diff --git a/components/sync/engine_impl/loopback_server/loopback_server_unittest.cc b/components/sync/engine_impl/loopback_server/loopback_server_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f5bfe8a52dfdd517e831183090f1a043b148facc |
| --- /dev/null |
| +++ b/components/sync/engine_impl/loopback_server/loopback_server_unittest.cc |
| @@ -0,0 +1,232 @@ |
| +// 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 "base/files/file_path.h" |
| +#include "base/files/file_util.h" |
| +#include "base/memory/ptr_util.h" |
| +#include "base/message_loop/message_loop.h" |
| +#include "components/sync/base/cancelation_signal.h" |
| +#include "components/sync/engine_impl/loopback_server/loopback_connection_manager.h" |
| +#include "components/sync/engine_impl/syncer_proto_util.h" |
| +#include "components/sync/protocol/sync.pb.h" |
| +#include "components/sync/protocol/sync_enums.pb.h" |
| +#include "components/sync/syncable/directory.h" |
| +#include "components/sync/test/engine/test_directory_setter_upper.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using sync_pb::ClientToServerMessage; |
| + |
| +namespace syncer { |
| + |
| +class LoopbackServerTest : public testing::Test { |
| + public: |
| + void SetUp() override { |
| + dir_maker_.SetUp(); |
| + base::CreateTemporaryFile(&persistent_file_); |
| + lcm_ = |
| + base::MakeUnique<LoopbackConnectionManager>(&signal_, persistent_file_); |
| + } |
| + |
| + void TearDown() override { dir_maker_.TearDown(); } |
| + |
| + syncable::Directory* directory() { return dir_maker_.directory(); } |
| + |
| + // Helper functions to call GetProtocolErrorFromResponse. Allows not adding |
| + // individual tests as friends to SyncerProtoUtil. |
| + static SyncProtocolError CallGetProtocolErrorFromResponse( |
|
pavely
2016/10/06 23:48:45
You don't use this function right now, Do you have
pastarmovj
2016/10/13 14:13:40
I was planning to but for not I don't need it so r
|
| + const sync_pb::ClientToServerResponse& response, |
| + syncable::Directory* directory) { |
| + return SyncerProtoUtil::GetProtocolErrorFromResponse(response, directory); |
| + } |
| + |
| + static bool CallPostAndProcessHeaders( |
| + ServerConnectionManager* scm, |
| + SyncCycle* cycle, |
| + const sync_pb::ClientToServerMessage& msg, |
| + sync_pb::ClientToServerResponse* response) { |
| + return SyncerProtoUtil::PostAndProcessHeaders(scm, cycle, msg, response); |
| + } |
| + |
| + protected: |
| + base::MessageLoop message_loop_; |
| + TestDirectorySetterUpper dir_maker_; |
|
pavely
2016/10/06 23:48:45
Why do you need directory and message loop here?
pastarmovj
2016/10/13 14:13:40
Leftovers :) Removed.
|
| + CancelationSignal signal_; |
| + base::FilePath persistent_file_; |
| + std::unique_ptr<LoopbackConnectionManager> lcm_; |
| +}; |
| + |
| +TEST_F(LoopbackServerTest, WrongBirthday) { |
| + ClientToServerMessage msg; |
| + SyncerProtoUtil::SetProtocolVersion(&msg); |
| + msg.set_share("required"); |
| + msg.set_store_birthday("not_your_birthday"); |
| + msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| + msg.mutable_get_updates()->add_from_progress_marker()->set_data_type_id( |
| + sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::NOT_MY_BIRTHDAY, response.error_code()); |
| +} |
| + |
| +TEST_F(LoopbackServerTest, GetUpdateCommand) { |
| + ClientToServerMessage msg; |
| + SyncerProtoUtil::SetProtocolVersion(&msg); |
| + msg.set_share("required"); |
| + msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| + msg.mutable_get_updates()->add_from_progress_marker()->set_data_type_id( |
| + sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + ASSERT_TRUE(response.has_get_updates()); |
| + // Expect to see the three top-level folders in this update already. |
| + EXPECT_EQ(3, response.get_updates().entries_size()); |
| +} |
| + |
| +TEST_F(LoopbackServerTest, ClearServerDataCommand) { |
| + ClientToServerMessage msg; |
| + SyncerProtoUtil::SetProtocolVersion(&msg); |
| + msg.set_share("required"); |
| + msg.set_message_contents(ClientToServerMessage::CLEAR_SERVER_DATA); |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + EXPECT_TRUE(response.has_clear_server_data()); |
| +} |
| + |
| +TEST_F(LoopbackServerTest, CommitCommand) { |
| + ClientToServerMessage msg; |
| + SyncerProtoUtil::SetProtocolVersion(&msg); |
| + msg.set_share("required"); |
| + msg.set_message_contents(ClientToServerMessage::COMMIT); |
| + msg.set_invalidator_client_id("client_id"); |
| + auto* commit = msg.mutable_commit(); |
| + commit->set_cache_guid("cache_guid"); |
| + auto* entry = commit->add_entries(); |
| + // Not quite well formed but enough to fool the server. |
| + entry->set_parent_id_string("bookmark_bar"); |
| + entry->set_id_string("id_string"); |
| + entry->set_version(0); |
| + entry->set_name("google"); |
| + entry->mutable_specifics()->mutable_bookmark()->set_url("http://google.de"); |
| + |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + EXPECT_TRUE(response.has_commit()); |
| +} |
| + |
| +TEST_F(LoopbackServerTest, LoadSavedState) { |
| + ClientToServerMessage commit_msg; |
| + SyncerProtoUtil::SetProtocolVersion(&commit_msg); |
| + commit_msg.set_share("required"); |
| + commit_msg.set_message_contents(ClientToServerMessage::COMMIT); |
| + commit_msg.set_invalidator_client_id("client_id"); |
| + auto* commit = commit_msg.mutable_commit(); |
| + commit->set_cache_guid("cache_guid"); |
| + auto* entry = commit->add_entries(); |
| + // Not quite well formed but enough to fool the server. |
| + entry->set_parent_id_string("bookmark_bar"); |
| + entry->set_id_string("id_string"); |
| + entry->set_version(0); |
| + entry->set_name("google"); |
| + entry->mutable_specifics()->mutable_bookmark()->set_url("http://google.de"); |
| + |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + EXPECT_TRUE(response.has_commit()); |
| + |
| + CancelationSignal signal; |
| + LoopbackConnectionManager second_user(&signal, persistent_file_); |
| + |
| + ClientToServerMessage get_updates_msg; |
| + SyncerProtoUtil::SetProtocolVersion(&get_updates_msg); |
| + get_updates_msg.set_share("required"); |
| + get_updates_msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| + get_updates_msg.mutable_get_updates() |
| + ->add_from_progress_marker() |
| + ->set_data_type_id(sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, get_updates_msg, &response)); |
|
pavely
2016/10/06 23:48:45
I think you meant second_user.
pastarmovj
2016/10/13 14:13:40
Done.
|
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + ASSERT_TRUE(response.has_get_updates()); |
|
pavely
2016/10/06 23:48:45
Sometimes you use ASSERT instead of EXPECT. Is it
pastarmovj
2016/10/13 14:13:40
Yes. The EXPECT below will crash if this is false.
|
| + // Expect to see the three top-level folders and the newly added bookmark! |
| + EXPECT_EQ(4, response.get_updates().entries_size()); |
| +} |
| + |
| +TEST_F(LoopbackServerTest, CommitCommandUpdate) { |
| + ClientToServerMessage commit_msg_1; |
| + SyncerProtoUtil::SetProtocolVersion(&commit_msg_1); |
| + commit_msg_1.set_share("required"); |
| + commit_msg_1.set_message_contents(ClientToServerMessage::COMMIT); |
| + commit_msg_1.set_invalidator_client_id("client_id"); |
| + auto* commit = commit_msg_1.mutable_commit(); |
| + commit->set_cache_guid("cache_guid"); |
| + auto* entry = commit->add_entries(); |
| + // Not quite well formed but enough to fool the server. |
|
pavely
2016/10/06 23:48:45
This block of code is repeated in every test that
pastarmovj
2016/10/13 14:13:40
Done.
|
| + entry->set_parent_id_string("bookmark_bar"); |
| + entry->set_id_string("id_string"); |
| + entry->set_version(0); |
| + entry->set_name("google"); |
| + entry->mutable_specifics()->mutable_bookmark()->set_url("http://google.de"); |
| + |
| + sync_pb::ClientToServerResponse response; |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg_1, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + EXPECT_TRUE(response.has_commit()); |
| + |
| + ClientToServerMessage get_updates_msg; |
| + SyncerProtoUtil::SetProtocolVersion(&get_updates_msg); |
| + get_updates_msg.set_share("required"); |
| + get_updates_msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| + get_updates_msg.mutable_get_updates() |
| + ->add_from_progress_marker() |
| + ->set_data_type_id(sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, get_updates_msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + ASSERT_TRUE(response.has_get_updates()); |
| + // Expect to see the three top-level folders and the newly added bookmark! |
| + EXPECT_EQ(4, response.get_updates().entries_size()); |
| + |
| + ClientToServerMessage commit_msg_2; |
| + SyncerProtoUtil::SetProtocolVersion(&commit_msg_2); |
| + commit_msg_2.set_share("required"); |
| + commit_msg_2.set_message_contents(ClientToServerMessage::COMMIT); |
| + commit_msg_2.set_invalidator_client_id("client_id"); |
| + auto* commit2 = commit_msg_2.mutable_commit(); |
| + commit2->set_cache_guid("cache_guid"); |
| + auto* entry2 = commit->add_entries(); |
| + // Move and change the bookmark |
| + entry2->set_parent_id_string("other_bookmarks"); |
| + entry2->set_id_string("id_string"); |
| + entry2->set_version(1); |
| + entry2->set_name("google"); |
| + entry2->mutable_specifics()->mutable_bookmark()->set_url("http://google.bg"); |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg_2, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + EXPECT_TRUE(response.has_commit()); |
| + |
| + EXPECT_TRUE( |
| + CallPostAndProcessHeaders(lcm_.get(), NULL, get_updates_msg, &response)); |
| + EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| + ASSERT_TRUE(response.has_get_updates()); |
| + // Expect to see no fifth bookmark! |
| + EXPECT_EQ(4, response.get_updates().entries_size()); |
| +} |
| + |
| +} // namespace syncer |