| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "base/files/file_path.h" |
| 6 #include "base/files/file_util.h" |
| 7 #include "base/memory/ptr_util.h" |
| 8 #include "components/sync/base/cancelation_signal.h" |
| 9 #include "components/sync/engine_impl/loopback_server/loopback_connection_manage
r.h" |
| 10 #include "components/sync/engine_impl/syncer_proto_util.h" |
| 11 #include "components/sync/protocol/sync.pb.h" |
| 12 #include "components/sync/protocol/sync_enums.pb.h" |
| 13 #include "components/sync/test/engine/test_directory_setter_upper.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 |
| 16 using sync_pb::ClientToServerMessage; |
| 17 |
| 18 namespace syncer { |
| 19 |
| 20 class LoopbackServerTest : public testing::Test { |
| 21 public: |
| 22 void SetUp() override { |
| 23 base::CreateTemporaryFile(&persistent_file_); |
| 24 lcm_ = |
| 25 base::MakeUnique<LoopbackConnectionManager>(&signal_, persistent_file_); |
| 26 } |
| 27 |
| 28 static bool CallPostAndProcessHeaders( |
| 29 ServerConnectionManager* scm, |
| 30 SyncCycle* cycle, |
| 31 const sync_pb::ClientToServerMessage& msg, |
| 32 sync_pb::ClientToServerResponse* response) { |
| 33 return SyncerProtoUtil::PostAndProcessHeaders(scm, cycle, msg, response); |
| 34 } |
| 35 |
| 36 protected: |
| 37 ClientToServerMessage CreateCommitMessage() { |
| 38 ClientToServerMessage msg; |
| 39 SyncerProtoUtil::SetProtocolVersion(&msg); |
| 40 msg.set_share("required"); |
| 41 msg.set_message_contents(ClientToServerMessage::COMMIT); |
| 42 msg.set_invalidator_client_id("client_id"); |
| 43 auto* commit = msg.mutable_commit(); |
| 44 commit->set_cache_guid("cache_guid"); |
| 45 auto* entry = commit->add_entries(); |
| 46 // Not quite well formed but enough to fool the server. |
| 47 entry->set_parent_id_string("bookmark_bar"); |
| 48 entry->set_id_string("id_string"); |
| 49 entry->set_version(0); |
| 50 entry->set_name("google"); |
| 51 entry->mutable_specifics()->mutable_bookmark()->set_url("http://google.de"); |
| 52 return msg; |
| 53 } |
| 54 |
| 55 CancelationSignal signal_; |
| 56 base::FilePath persistent_file_; |
| 57 std::unique_ptr<LoopbackConnectionManager> lcm_; |
| 58 }; |
| 59 |
| 60 TEST_F(LoopbackServerTest, WrongBirthday) { |
| 61 ClientToServerMessage msg; |
| 62 SyncerProtoUtil::SetProtocolVersion(&msg); |
| 63 msg.set_share("required"); |
| 64 msg.set_store_birthday("not_your_birthday"); |
| 65 msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| 66 msg.mutable_get_updates()->add_from_progress_marker()->set_data_type_id( |
| 67 sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| 68 sync_pb::ClientToServerResponse response; |
| 69 |
| 70 EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| 71 EXPECT_EQ(sync_pb::SyncEnums::NOT_MY_BIRTHDAY, response.error_code()); |
| 72 } |
| 73 |
| 74 TEST_F(LoopbackServerTest, GetUpdateCommand) { |
| 75 ClientToServerMessage msg; |
| 76 SyncerProtoUtil::SetProtocolVersion(&msg); |
| 77 msg.set_share("required"); |
| 78 msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| 79 msg.mutable_get_updates()->add_from_progress_marker()->set_data_type_id( |
| 80 sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| 81 sync_pb::ClientToServerResponse response; |
| 82 |
| 83 EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| 84 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 85 ASSERT_TRUE(response.has_get_updates()); |
| 86 // Expect to see the three top-level folders in this update already. |
| 87 EXPECT_EQ(3, response.get_updates().entries_size()); |
| 88 } |
| 89 |
| 90 TEST_F(LoopbackServerTest, ClearServerDataCommand) { |
| 91 ClientToServerMessage msg; |
| 92 SyncerProtoUtil::SetProtocolVersion(&msg); |
| 93 msg.set_share("required"); |
| 94 msg.set_message_contents(ClientToServerMessage::CLEAR_SERVER_DATA); |
| 95 sync_pb::ClientToServerResponse response; |
| 96 |
| 97 EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| 98 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 99 EXPECT_TRUE(response.has_clear_server_data()); |
| 100 } |
| 101 |
| 102 TEST_F(LoopbackServerTest, CommitCommand) { |
| 103 ClientToServerMessage msg = CreateCommitMessage(); |
| 104 sync_pb::ClientToServerResponse response; |
| 105 |
| 106 EXPECT_TRUE(CallPostAndProcessHeaders(lcm_.get(), NULL, msg, &response)); |
| 107 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 108 EXPECT_TRUE(response.has_commit()); |
| 109 } |
| 110 |
| 111 TEST_F(LoopbackServerTest, LoadSavedState) { |
| 112 ClientToServerMessage commit_msg = CreateCommitMessage(); |
| 113 |
| 114 sync_pb::ClientToServerResponse response; |
| 115 |
| 116 EXPECT_TRUE( |
| 117 CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg, &response)); |
| 118 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 119 EXPECT_TRUE(response.has_commit()); |
| 120 |
| 121 CancelationSignal signal; |
| 122 LoopbackConnectionManager second_user(&signal, persistent_file_); |
| 123 |
| 124 ClientToServerMessage get_updates_msg; |
| 125 SyncerProtoUtil::SetProtocolVersion(&get_updates_msg); |
| 126 get_updates_msg.set_share("required"); |
| 127 get_updates_msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| 128 get_updates_msg.mutable_get_updates() |
| 129 ->add_from_progress_marker() |
| 130 ->set_data_type_id(sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| 131 |
| 132 EXPECT_TRUE(CallPostAndProcessHeaders(&second_user, NULL, get_updates_msg, |
| 133 &response)); |
| 134 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 135 ASSERT_TRUE(response.has_get_updates()); |
| 136 // Expect to see the three top-level folders and the newly added bookmark! |
| 137 EXPECT_EQ(4, response.get_updates().entries_size()); |
| 138 } |
| 139 |
| 140 TEST_F(LoopbackServerTest, CommitCommandUpdate) { |
| 141 ClientToServerMessage commit_msg_1 = CreateCommitMessage(); |
| 142 sync_pb::ClientToServerResponse response; |
| 143 |
| 144 EXPECT_TRUE( |
| 145 CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg_1, &response)); |
| 146 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 147 EXPECT_TRUE(response.has_commit()); |
| 148 const std::string server_id = response.commit().entryresponse(0).id_string(); |
| 149 |
| 150 ClientToServerMessage get_updates_msg; |
| 151 SyncerProtoUtil::SetProtocolVersion(&get_updates_msg); |
| 152 get_updates_msg.set_share("required"); |
| 153 get_updates_msg.set_message_contents(ClientToServerMessage::GET_UPDATES); |
| 154 get_updates_msg.mutable_get_updates() |
| 155 ->add_from_progress_marker() |
| 156 ->set_data_type_id(sync_pb::EntitySpecifics::kBookmarkFieldNumber); |
| 157 |
| 158 EXPECT_TRUE( |
| 159 CallPostAndProcessHeaders(lcm_.get(), NULL, get_updates_msg, &response)); |
| 160 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 161 ASSERT_TRUE(response.has_get_updates()); |
| 162 // Expect to see the three top-level folders and the newly added bookmark! |
| 163 EXPECT_EQ(4, response.get_updates().entries_size()); |
| 164 |
| 165 ClientToServerMessage commit_msg_2 = CreateCommitMessage(); |
| 166 auto* entry = commit_msg_2.mutable_commit()->mutable_entries()->Mutable(0); |
| 167 entry->set_id_string(server_id); |
| 168 entry->set_version(1); |
| 169 entry->set_parent_id_string("other_bookmarks"); |
| 170 entry->mutable_specifics()->mutable_bookmark()->set_url("http://google.bg"); |
| 171 |
| 172 EXPECT_TRUE( |
| 173 CallPostAndProcessHeaders(lcm_.get(), NULL, commit_msg_2, &response)); |
| 174 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 175 EXPECT_TRUE(response.has_commit()); |
| 176 |
| 177 EXPECT_TRUE( |
| 178 CallPostAndProcessHeaders(lcm_.get(), NULL, get_updates_msg, &response)); |
| 179 EXPECT_EQ(sync_pb::SyncEnums::SUCCESS, response.error_code()); |
| 180 ASSERT_TRUE(response.has_get_updates()); |
| 181 // Expect to see no fifth bookmark! |
| 182 EXPECT_EQ(4, response.get_updates().entries_size()); |
| 183 } |
| 184 |
| 185 } // namespace syncer |
| OLD | NEW |