Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Unified Diff: components/sync/engine_impl/loopback_server/loopback_server_unittest.cc

Issue 2360703002: [Sync] Implements the loopback sync server. (Closed)
Patch Set: Address comment. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698