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

Side by Side Diff: google_apis/gcm/engine/user_list_unittest.cc

Issue 135303002: Adding a user list (to be consumed by GCM Client Implementation) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 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 2014 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 "google_apis/gcm/engine/user_list.h"
6
7 #include <string>
8 #include <vector>
9
10 #include "base/bind.h"
11 #include "base/callback_forward.h"
12 #include "base/files/file_path.h"
13 #include "base/files/scoped_temp_dir.h"
14 #include "base/memory/scoped_ptr.h"
15 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h"
17 #include "google_apis/gcm/engine/gcm_store_impl.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 namespace gcm {
21
22 class UserListTest : public testing::Test {
23 public:
24 UserListTest();
25 virtual ~UserListTest();
26
27 static unsigned long GetListSize(const UserList* user_list);
28
29 scoped_ptr<UserList> BuildUserList();
30
31 void PumpLoop();
32
33 void UpdateCallback(bool success);
34
35 scoped_ptr<GCMStore> gcm_store_;
36 base::ScopedTempDir temp_directory_;
37 base::MessageLoop message_loop_;
38 };
39
40 class GCMClientDelegate : public GCMClient::Delegate {
41 public:
42 explicit GCMClientDelegate(const std::string& username);
43 virtual ~GCMClientDelegate();
44
45 const std::string& GetUsername() const {
46 return username_;
47 }
48
49 // Overrides of GCMClientDelegate:
50 virtual void OnCheckInFinished(const GCMClient::CheckinInfo& checkin_info,
51 GCMClient::Result result) OVERRIDE {}
52 virtual void OnRegisterFinished(const std::string& app_id,
53 const std::string& registration_id,
54 GCMClient::Result result) OVERRIDE {}
55 virtual void OnSendFinished(const std::string& app_id,
56 const std::string& message_id,
57 GCMClient::Result result) OVERRIDE {}
58 virtual void OnMessageReceived(
59 const std::string& app_id,
60 const GCMClient::IncomingMessage& message) OVERRIDE {}
61 virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE {}
62 virtual void OnMessageSendError(const std::string& app_id,
63 const std::string& message_id,
64 GCMClient::Result result) OVERRIDE {}
65 virtual GCMClient::CheckinInfo GetCheckinInfo() const OVERRIDE {
66 return checkin_info_;
67 }
68 virtual void OnLoadingCompleted() OVERRIDE {}
69 virtual base::TaskRunner* GetFileTaskRunner() OVERRIDE {
70 return NULL;
71 }
72
73 private:
74 GCMClient::CheckinInfo checkin_info_;
75 std::string username_;
76 };
77
78 UserListTest::UserListTest() {
79 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir());
80 }
81
82 UserListTest::~UserListTest() {
83 }
84
85 //static
86 unsigned long UserListTest::GetListSize(const UserList* user_list) {
87 return user_list->delegates_.size();
88 }
89
90 scoped_ptr<UserList> UserListTest::BuildUserList() {
91 gcm_store_.reset(new GCMStoreImpl(
92 temp_directory_.path(),
93 message_loop_.message_loop_proxy()));
94 return scoped_ptr<UserList>(new UserList(gcm_store_.get()));
95 }
96
97 void UserListTest::PumpLoop() {
98 message_loop_.RunUntilIdle();
99 }
100
101 void UserListTest::UpdateCallback(bool success) {
102 ASSERT_TRUE(success);
103 }
104
105 GCMClientDelegate::GCMClientDelegate(const std::string& username)
106 : username_(username) {
107 }
108
109 GCMClientDelegate::~GCMClientDelegate() { }
110
111 TEST_F(UserListTest, AddDelegateAddSerialNumber) {
112 scoped_ptr<UserList> user_list(BuildUserList());
113 gcm_store_->Load(base::Bind(&UserList::Initialize,
114 base::Unretained(user_list.get())));
115 PumpLoop();
116
117 // First adding a delegate.
118 scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1"));
119 user_list->AddDelegate(delegate->GetUsername(), delegate.get());
120
121 // Verify the record was created.
122 EXPECT_EQ(1u, GetListSize(user_list.get()));
123 int64 read_serial_number;
124 EXPECT_FALSE(user_list->GetSerialNumberForUsername(delegate->GetUsername(),
125 &read_serial_number));
126 EXPECT_EQ(delegate.get(),
127 user_list->GetDelegateByUsername(delegate->GetUsername()));
128
129 // Add then a serial number.
130 int64 serial_number = user_list->GetNextSerialNumber();
131 user_list->AddSerialNumber(delegate->GetUsername(),
132 serial_number,
133 base::Bind(&UserListTest::UpdateCallback,
134 base::Unretained(this)));
135 PumpLoop();
136
137 // Ensuring that the record was updated in place.
138 EXPECT_EQ(1u, GetListSize(user_list.get()));
139 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate->GetUsername(),
140 &read_serial_number));
141 EXPECT_EQ(serial_number, read_serial_number);
142 EXPECT_EQ(delegate.get(),
143 user_list->GetDelegateByUsername(delegate->GetUsername()));
144 EXPECT_EQ(delegate.get(),
145 user_list->GetDelegateBySerialNumber(serial_number));
146 }
147
148 TEST_F(UserListTest, LoadUserEntryAddDelegate) {
149 scoped_ptr<UserList> user_list(BuildUserList());
150 gcm_store_->Load(base::Bind(&UserList::Initialize,
151 base::Unretained(user_list.get())));
152 PumpLoop();
153
154 // Start by adding a delegate and a serial number.
155 int64 serial_number = user_list->GetNextSerialNumber();
156 scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1"));
157 user_list->AddDelegate(delegate->GetUsername(), delegate.get());
158 user_list->AddSerialNumber(delegate->GetUsername(),
159 serial_number,
160 base::Bind(&UserListTest::UpdateCallback,
161 base::Unretained(this)));
162 PumpLoop();
163
164 // Reload the GCM User List.
165 user_list = BuildUserList().Pass();
166 gcm_store_->Load(base::Bind(&UserList::Initialize,
167 base::Unretained(user_list.get())));
168 PumpLoop();
169
170 // Verify a single record was loaded, with matching username, but no delegate.
171 EXPECT_EQ(1u, GetListSize(user_list.get()));
172 int64 read_serial_number;
173 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate->GetUsername(),
174 &read_serial_number));
175 EXPECT_EQ(serial_number, read_serial_number);
176 EXPECT_EQ(NULL,
177 user_list->GetDelegateByUsername(delegate->GetUsername()));
178 EXPECT_EQ(NULL,
179 user_list->GetDelegateBySerialNumber(serial_number));
180
181 // After loading is complete, Delegates will start adding itself looking for
182 // their serial numbers. Check that correct matches are found and new records
183 // not created.
184 user_list->AddDelegate(delegate->GetUsername(), delegate.get());
185 EXPECT_EQ(1u, GetListSize(user_list.get()));
186 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate->GetUsername(),
187 &read_serial_number));
188 EXPECT_EQ(serial_number, read_serial_number);
189 EXPECT_EQ(delegate.get(),
190 user_list->GetDelegateByUsername(delegate->GetUsername()));
191 EXPECT_EQ(delegate.get(),
192 user_list->GetDelegateBySerialNumber(serial_number));
193 }
194
195 TEST_F(UserListTest, GetDelegate) {
196 scoped_ptr<UserList> user_list(BuildUserList());
197 gcm_store_->Load(base::Bind(&UserList::Initialize,
198 base::Unretained(user_list.get())));
199 PumpLoop();
200
201 // Start by adding a delegate and a serial number.
202 int64 serial_number = user_list->GetNextSerialNumber();
203 scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1"));
204 user_list->AddDelegate(delegate->GetUsername(), delegate.get());
205 user_list->AddSerialNumber(delegate->GetUsername(),
206 serial_number,
207 base::Bind(&UserListTest::UpdateCallback,
208 base::Unretained(this)));
209 PumpLoop();
210
211 EXPECT_EQ(delegate.get(),
212 user_list->GetDelegateBySerialNumber(serial_number));
213 EXPECT_EQ(delegate.get(),
214 user_list->GetDelegateByUsername(delegate->GetUsername()));
215 }
216
217 TEST_F(UserListTest, GetSerialNumberForUsername) {
218 scoped_ptr<UserList> user_list(BuildUserList());
219 gcm_store_->Load(base::Bind(&UserList::Initialize,
220 base::Unretained(user_list.get())));
221 PumpLoop();
222
223 // Start by adding a delegate and a serial number.
224 int64 serial_number = user_list->GetNextSerialNumber();
225 scoped_ptr<GCMClientDelegate> delegate(new GCMClientDelegate("test_user_1"));
226 user_list->AddDelegate(delegate->GetUsername(), delegate.get());
227 user_list->AddSerialNumber(delegate->GetUsername(),
228 serial_number,
229 base::Bind(&UserListTest::UpdateCallback,
230 base::Unretained(this)));
231 PumpLoop();
232
233 int64 read_serial_number;
234 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate->GetUsername(),
235 &read_serial_number));
236 EXPECT_EQ(serial_number, read_serial_number);
237 }
238
239 TEST_F(UserListTest, AddMultipleDelegates) {
240 scoped_ptr<UserList> user_list(BuildUserList());
241 gcm_store_->Load(base::Bind(&UserList::Initialize,
242 base::Unretained(user_list.get())));
243 PumpLoop();
244
245 // Start by adding a delegate and a serial number.
246 scoped_ptr<GCMClientDelegate> delegate1(new GCMClientDelegate("test_user_1"));
247 user_list->AddDelegate(delegate1->GetUsername(), delegate1.get());
248 int64 serial_number1 = user_list->GetNextSerialNumber();
249 user_list->AddSerialNumber(delegate1->GetUsername(),
250 serial_number1,
251 base::Bind(&UserListTest::UpdateCallback,
252 base::Unretained(this)));
253 scoped_ptr<GCMClientDelegate> delegate2(new GCMClientDelegate("test_user_2"));
254 user_list->AddDelegate(delegate2->GetUsername(), delegate2.get());
255 int64 serial_number2 = user_list->GetNextSerialNumber();
256 user_list->AddSerialNumber(delegate2->GetUsername(),
257 serial_number2,
258 base::Bind(&UserListTest::UpdateCallback,
259 base::Unretained(this)));
260 PumpLoop();
261
262 // Ensuring that serial numbers are different.
263 EXPECT_NE(serial_number1, serial_number2);
264
265 // Verifying that each entry has it's own serial numbers and delegates.
266 EXPECT_EQ(2u, GetListSize(user_list.get()));
267 EXPECT_EQ(delegate1.get(),
268 user_list->GetDelegateByUsername(delegate1->GetUsername()));
269 EXPECT_EQ(delegate1.get(),
270 user_list->GetDelegateBySerialNumber(serial_number1));
271 int64 read_serial_number;
272 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate1->GetUsername(),
273 &read_serial_number));
274 EXPECT_EQ(serial_number1, read_serial_number);
275 EXPECT_EQ(delegate2.get(),
276 user_list->GetDelegateByUsername(delegate2->GetUsername()));
277 EXPECT_EQ(delegate2.get(),
278 user_list->GetDelegateBySerialNumber(serial_number2));
279 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate2->GetUsername(),
280 &read_serial_number));
281 EXPECT_EQ(serial_number2, read_serial_number);
282
283 // Reading the user entries.
284 user_list = BuildUserList().Pass();
285 gcm_store_->Load(base::Bind(&UserList::Initialize,
286 base::Unretained(user_list.get())));
287 PumpLoop();
288
289 // Serial numbers stay the same, but there are no delegates assigned.
290 EXPECT_EQ(2u, GetListSize(user_list.get()));
291 EXPECT_EQ(NULL,
292 user_list->GetDelegateByUsername(delegate1->GetUsername()));
293 EXPECT_EQ(NULL,
294 user_list->GetDelegateBySerialNumber(serial_number1));
295 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate1->GetUsername(),
296 &read_serial_number));
297 EXPECT_EQ(serial_number1, read_serial_number);
298 EXPECT_EQ(NULL,
299 user_list->GetDelegateByUsername(delegate2->GetUsername()));
300 EXPECT_EQ(NULL,
301 user_list->GetDelegateBySerialNumber(serial_number2));
302 EXPECT_TRUE(user_list->GetSerialNumberForUsername(delegate2->GetUsername(),
303 &read_serial_number));
304 EXPECT_EQ(serial_number2, read_serial_number);
305
306 // Setting and checking a delegate on the second user.
307 user_list->AddDelegate(delegate2->GetUsername(), delegate2.get());
308 EXPECT_EQ(delegate2.get(),
309 user_list->GetDelegateByUsername(delegate2->GetUsername()));
310 EXPECT_EQ(delegate2.get(),
311 user_list->GetDelegateBySerialNumber(serial_number2));
312 // First user still does not have a delegate.
313 EXPECT_EQ(NULL,
314 user_list->GetDelegateByUsername(delegate1->GetUsername()));
315 EXPECT_EQ(NULL,
316 user_list->GetDelegateBySerialNumber(serial_number1));
317 }
318
319 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698