| 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..ea1464ea4bf3ad1505466568b11170be58d5212c
|
| --- /dev/null
|
| +++ b/components/sync/engine_impl/loopback_server/loopback_server_unittest.cc
|
| @@ -0,0 +1,185 @@
|
| +// 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 "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/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 {
|
| + base::CreateTemporaryFile(&persistent_file_);
|
| + lcm_ =
|
| + base::MakeUnique<LoopbackConnectionManager>(&signal_, persistent_file_);
|
| + }
|
| +
|
| + static bool CallPostAndProcessHeaders(
|
| + ServerConnectionManager* scm,
|
| + SyncCycle* cycle,
|
| + const sync_pb::ClientToServerMessage& msg,
|
| + sync_pb::ClientToServerResponse* response) {
|
| + return SyncerProtoUtil::PostAndProcessHeaders(scm, cycle, msg, response);
|
| + }
|
| +
|
| + protected:
|
| + ClientToServerMessage CreateCommitMessage() {
|
| + 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");
|
| + return msg;
|
| + }
|
| +
|
| + 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 = CreateCommitMessage();
|
| + 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 = CreateCommitMessage();
|
| +
|
| + 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(&second_user, 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());
|
| +}
|
| +
|
| +TEST_F(LoopbackServerTest, CommitCommandUpdate) {
|
| + ClientToServerMessage commit_msg_1 = CreateCommitMessage();
|
| + 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());
|
| + const std::string server_id = response.commit().entryresponse(0).id_string();
|
| +
|
| + 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 = CreateCommitMessage();
|
| + auto* entry = commit_msg_2.mutable_commit()->mutable_entries()->Mutable(0);
|
| + entry->set_id_string(server_id);
|
| + entry->set_version(1);
|
| + entry->set_parent_id_string("other_bookmarks");
|
| + entry->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
|
|
|