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

Side by Side 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 unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698