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

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

Issue 2360703002: [Sync] Implements the loopback sync server. (Closed)
Patch Set: Shuffle and rename stuff around. 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..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

Powered by Google App Engine
This is Rietveld 408576698