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

Side by Side Diff: components/gcm_driver/gcm_account_mapper_unittest.cc

Issue 554153003: Revert of [GCM] Adding GCMAccountMapper tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/gcm_driver/gcm_account_mapper.h" 5 #include "components/gcm_driver/gcm_account_mapper.h"
6 6
7 #include "base/test/simple_test_clock.h" 7 #include "base/test/simple_test_clock.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "components/gcm_driver/fake_gcm_driver.h" 9 #include "components/gcm_driver/fake_gcm_driver.h"
10 #include "google_apis/gcm/engine/account_mapping.h" 10 #include "google_apis/gcm/engine/account_mapping.h"
(...skipping 26 matching lines...) Expand all
37 const std::string& account_id) { 37 const std::string& account_id) {
38 GCMClient::AccountTokenInfo account_token; 38 GCMClient::AccountTokenInfo account_token;
39 account_token.account_id = account_id; 39 account_token.account_id = account_id;
40 account_token.email = account_id + "@gmail.com"; 40 account_token.email = account_id + "@gmail.com";
41 account_token.access_token = account_id + "_token"; 41 account_token.access_token = account_id + "_token";
42 return account_token; 42 return account_token;
43 } 43 }
44 44
45 class CustomFakeGCMDriver : public FakeGCMDriver { 45 class CustomFakeGCMDriver : public FakeGCMDriver {
46 public: 46 public:
47 enum LastMessageAction {
48 NONE,
49 SEND_STARTED,
50 SEND_FINISHED,
51 SEND_ACKNOWLEDGED
52 };
53
54 CustomFakeGCMDriver(); 47 CustomFakeGCMDriver();
55 virtual ~CustomFakeGCMDriver(); 48 virtual ~CustomFakeGCMDriver();
56 49
57 virtual void UpdateAccountMapping( 50 virtual void UpdateAccountMapping(
58 const AccountMapping& account_mapping) OVERRIDE; 51 const AccountMapping& account_mapping) OVERRIDE;
59 virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE; 52 virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE;
60 virtual void AddAppHandler(const std::string& app_id, 53 virtual void AddAppHandler(const std::string& app_id,
61 GCMAppHandler* handler) OVERRIDE; 54 GCMAppHandler* handler) OVERRIDE;
62 virtual void RemoveAppHandler(const std::string& app_id) OVERRIDE; 55 virtual void RemoveAppHandler(const std::string& app_id) OVERRIDE;
63 56
64 void CompleteSend(const std::string& message_id, GCMClient::Result result); 57 void CompleteSend(const std::string& message_id, GCMClient::Result result);
65 void AcknowledgeSend(const std::string& message_id); 58 void SendAcknowledged(const std::string& message_id);
66 void MessageSendError(const std::string& message_id); 59 void MessageSendError(const std::string& message_id);
67 60
68 void CompleteSendAllMessages();
69 void AcknowledgeSendAllMessages();
70
71 void SetLastMessageAction(const std::string& message_id,
72 LastMessageAction action);
73 void Clear();
74
75 const AccountMapping& last_account_mapping() const { 61 const AccountMapping& last_account_mapping() const {
76 return account_mapping_; 62 return account_mapping_;
77 } 63 }
78 const std::string& last_message_id() const { return last_message_id_; } 64 const std::string& last_message_id() const { return last_message_id_; }
79 const std::string& last_removed_account_id() const { 65 const std::string& last_removed_account_id() const {
80 return last_removed_account_id_; 66 return last_removed_account_id_;
81 } 67 }
82 LastMessageAction last_action() const { return last_action_; }
83 68
84 protected: 69 protected:
85 virtual void SendImpl(const std::string& app_id, 70 virtual void SendImpl(const std::string& app_id,
86 const std::string& receiver_id, 71 const std::string& receiver_id,
87 const GCMClient::OutgoingMessage& message) OVERRIDE; 72 const GCMClient::OutgoingMessage& message) OVERRIDE;
88 73
89 private: 74 private:
90 AccountMapping account_mapping_; 75 AccountMapping account_mapping_;
91 std::string last_message_id_; 76 std::string last_message_id_;
92 std::string last_removed_account_id_; 77 std::string last_removed_account_id_;
93 LastMessageAction last_action_;
94 std::map<std::string, LastMessageAction> all_messages_;
95 }; 78 };
96 79
97 CustomFakeGCMDriver::CustomFakeGCMDriver() : last_action_(NONE) { 80 CustomFakeGCMDriver::CustomFakeGCMDriver() {
98 } 81 }
99 82
100 CustomFakeGCMDriver::~CustomFakeGCMDriver() { 83 CustomFakeGCMDriver::~CustomFakeGCMDriver() {
101 } 84 }
102 85
103 void CustomFakeGCMDriver::UpdateAccountMapping( 86 void CustomFakeGCMDriver::UpdateAccountMapping(
104 const AccountMapping& account_mapping) { 87 const AccountMapping& account_mapping) {
105 account_mapping_.email = account_mapping.email; 88 account_mapping_.email = account_mapping.email;
106 account_mapping_.account_id = account_mapping.account_id; 89 account_mapping_.account_id = account_mapping.account_id;
107 account_mapping_.access_token = account_mapping.access_token; 90 account_mapping_.access_token = account_mapping.access_token;
(...skipping 12 matching lines...) Expand all
120 GCMDriver::AddAppHandler(app_id, handler); 103 GCMDriver::AddAppHandler(app_id, handler);
121 } 104 }
122 105
123 void CustomFakeGCMDriver::RemoveAppHandler(const std::string& app_id) { 106 void CustomFakeGCMDriver::RemoveAppHandler(const std::string& app_id) {
124 GCMDriver::RemoveAppHandler(app_id); 107 GCMDriver::RemoveAppHandler(app_id);
125 } 108 }
126 109
127 void CustomFakeGCMDriver::CompleteSend(const std::string& message_id, 110 void CustomFakeGCMDriver::CompleteSend(const std::string& message_id,
128 GCMClient::Result result) { 111 GCMClient::Result result) {
129 SendFinished(kGCMAccountMapperAppId, message_id, result); 112 SendFinished(kGCMAccountMapperAppId, message_id, result);
130 SetLastMessageAction(message_id, SEND_FINISHED);
131 } 113 }
132 114
133 void CustomFakeGCMDriver::AcknowledgeSend(const std::string& message_id) { 115 void CustomFakeGCMDriver::SendAcknowledged(const std::string& message_id) {
134 GetAppHandler(kGCMAccountMapperAppId) 116 GetAppHandler(kGCMAccountMapperAppId)
135 ->OnSendAcknowledged(kGCMAccountMapperAppId, message_id); 117 ->OnSendAcknowledged(kGCMAccountMapperAppId, message_id);
136 SetLastMessageAction(message_id, SEND_ACKNOWLEDGED);
137 } 118 }
138 119
139 void CustomFakeGCMDriver::MessageSendError(const std::string& message_id) { 120 void CustomFakeGCMDriver::MessageSendError(const std::string& message_id) {
140 GCMClient::SendErrorDetails send_error; 121 GCMClient::SendErrorDetails send_error;
141 send_error.message_id = message_id; 122 send_error.message_id = message_id;
142 send_error.result = GCMClient::TTL_EXCEEDED; 123 send_error.result = GCMClient::TTL_EXCEEDED;
143 GetAppHandler(kGCMAccountMapperAppId) 124 GetAppHandler(kGCMAccountMapperAppId)
144 ->OnSendError(kGCMAccountMapperAppId, send_error); 125 ->OnSendError(kGCMAccountMapperAppId, send_error);
145 } 126 }
146 127
147 void CustomFakeGCMDriver::SendImpl(const std::string& app_id, 128 void CustomFakeGCMDriver::SendImpl(const std::string& app_id,
148 const std::string& receiver_id, 129 const std::string& receiver_id,
149 const GCMClient::OutgoingMessage& message) { 130 const GCMClient::OutgoingMessage& message) {
150 DCHECK_EQ(kGCMAccountMapperAppId, app_id); 131 DCHECK_EQ(kGCMAccountMapperAppId, app_id);
151 DCHECK_EQ(kGCMAccountMapperSenderId, receiver_id); 132 DCHECK_EQ(kGCMAccountMapperSenderId, receiver_id);
152 133
153 SetLastMessageAction(message.id, SEND_STARTED); 134 last_message_id_ = message.id;
154 }
155
156 void CustomFakeGCMDriver::CompleteSendAllMessages() {
157 for (std::map<std::string, LastMessageAction>::const_iterator iter =
158 all_messages_.begin();
159 iter != all_messages_.end();
160 ++iter) {
161 if (iter->second == SEND_STARTED)
162 CompleteSend(iter->first, GCMClient::SUCCESS);
163 }
164 }
165
166 void CustomFakeGCMDriver::AcknowledgeSendAllMessages() {
167 for (std::map<std::string, LastMessageAction>::const_iterator iter =
168 all_messages_.begin();
169 iter != all_messages_.end();
170 ++iter) {
171 if (iter->second == SEND_FINISHED)
172 AcknowledgeSend(iter->first);
173 }
174 }
175
176 void CustomFakeGCMDriver::Clear() {
177 account_mapping_ = AccountMapping();
178 last_message_id_.clear();
179 last_removed_account_id_.clear();
180 last_action_ = NONE;
181 }
182
183 void CustomFakeGCMDriver::SetLastMessageAction(const std::string& message_id,
184 LastMessageAction action) {
185 last_action_ = action;
186 last_message_id_ = message_id;
187 all_messages_[message_id] = action;
188 } 135 }
189 136
190 } // namespace 137 } // namespace
191 138
192 class GCMAccountMapperTest : public testing::Test { 139 class GCMAccountMapperTest : public testing::Test {
193 public: 140 public:
194 GCMAccountMapperTest(); 141 GCMAccountMapperTest();
195 virtual ~GCMAccountMapperTest(); 142 virtual ~GCMAccountMapperTest();
196 143
197 void Restart(); 144 void Restart();
198 145
199 const GCMAccountMapper::AccountMappings& GetAccounts() const { 146 const std::vector<AccountMapping>& GetAccounts() const {
200 return account_mapper_->accounts_; 147 return account_mapper_->accounts_;
201 } 148 }
202 149
203 GCMAccountMapper* mapper() { return account_mapper_.get(); } 150 GCMAccountMapper* mapper() { return account_mapper_.get(); }
204 151
205 CustomFakeGCMDriver& gcm_driver() { return gcm_driver_; } 152 CustomFakeGCMDriver& gcm_driver() { return gcm_driver_; }
206 153
207 base::SimpleTestClock* clock() { return clock_; } 154 base::SimpleTestClock* clock() { return clock_; }
208 155
209 private: 156 private:
(...skipping 13 matching lines...) Expand all
223 if (account_mapper_) 170 if (account_mapper_)
224 account_mapper_->ShutdownHandler(); 171 account_mapper_->ShutdownHandler();
225 account_mapper_.reset(new GCMAccountMapper(&gcm_driver_)); 172 account_mapper_.reset(new GCMAccountMapper(&gcm_driver_));
226 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); 173 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock);
227 clock_ = clock.get(); 174 clock_ = clock.get();
228 account_mapper_->SetClockForTesting(clock.PassAs<base::Clock>()); 175 account_mapper_->SetClockForTesting(clock.PassAs<base::Clock>());
229 } 176 }
230 177
231 // Tests the initialization of account mappings (from the store) when empty. 178 // Tests the initialization of account mappings (from the store) when empty.
232 TEST_F(GCMAccountMapperTest, InitializeAccountMappingsEmpty) { 179 TEST_F(GCMAccountMapperTest, InitializeAccountMappingsEmpty) {
233 GCMAccountMapper::AccountMappings account_mappings; 180 std::vector<AccountMapping> account_mappings;
234 mapper()->Initialize(account_mappings, ""); 181 mapper()->Initialize(account_mappings, "");
235 EXPECT_TRUE(GetAccounts().empty()); 182 EXPECT_TRUE(GetAccounts().empty());
236 } 183 }
237 184
238 // Tests the initialization of account mappings (from the store). 185 // Tests the initialization of account mappings (from the store).
239 TEST_F(GCMAccountMapperTest, InitializeAccountMappings) { 186 TEST_F(GCMAccountMapperTest, InitializeAccountMappings) {
240 GCMAccountMapper::AccountMappings account_mappings; 187 std::vector<AccountMapping> account_mappings;
241 AccountMapping account_mapping1 = MakeAccountMapping("acc_id1", 188 AccountMapping account_mapping1 = MakeAccountMapping("acc_id1",
242 AccountMapping::MAPPED, 189 AccountMapping::MAPPED,
243 base::Time::Now(), 190 base::Time::Now(),
244 std::string()); 191 std::string());
245 AccountMapping account_mapping2 = MakeAccountMapping("acc_id2", 192 AccountMapping account_mapping2 = MakeAccountMapping("acc_id2",
246 AccountMapping::ADDING, 193 AccountMapping::ADDING,
247 base::Time::Now(), 194 base::Time::Now(),
248 "add_message_1"); 195 "add_message_1");
249 account_mappings.push_back(account_mapping1); 196 account_mappings.push_back(account_mapping1);
250 account_mappings.push_back(account_mapping2); 197 account_mappings.push_back(account_mapping2);
251 198
252 mapper()->Initialize(account_mappings, ""); 199 mapper()->Initialize(account_mappings, "");
253 200
254 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 201 std::vector<AccountMapping> mappings = GetAccounts();
255 EXPECT_EQ(2UL, mappings.size()); 202 EXPECT_EQ(2UL, mappings.size());
256 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 203 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
257 204
258 EXPECT_EQ(account_mapping1.account_id, iter->account_id); 205 EXPECT_EQ(account_mapping1.account_id, iter->account_id);
259 EXPECT_EQ(account_mapping1.email, iter->email); 206 EXPECT_EQ(account_mapping1.email, iter->email);
260 EXPECT_TRUE(account_mapping1.access_token.empty()); 207 EXPECT_TRUE(account_mapping1.access_token.empty());
261 EXPECT_EQ(account_mapping1.status, iter->status); 208 EXPECT_EQ(account_mapping1.status, iter->status);
262 EXPECT_EQ(account_mapping1.status_change_timestamp, 209 EXPECT_EQ(account_mapping1.status_change_timestamp,
263 iter->status_change_timestamp); 210 iter->status_change_timestamp);
264 EXPECT_TRUE(account_mapping1.last_message_id.empty()); 211 EXPECT_TRUE(account_mapping1.last_message_id.empty());
265 212
266 ++iter; 213 ++iter;
267 EXPECT_EQ(account_mapping2.account_id, iter->account_id); 214 EXPECT_EQ(account_mapping2.account_id, iter->account_id);
268 EXPECT_EQ(account_mapping2.email, iter->email); 215 EXPECT_EQ(account_mapping2.email, iter->email);
269 EXPECT_TRUE(account_mapping2.access_token.empty()); 216 EXPECT_TRUE(account_mapping2.access_token.empty());
270 EXPECT_EQ(account_mapping2.status, iter->status); 217 EXPECT_EQ(account_mapping2.status, iter->status);
271 EXPECT_EQ(account_mapping2.status_change_timestamp, 218 EXPECT_EQ(account_mapping2.status_change_timestamp,
272 iter->status_change_timestamp); 219 iter->status_change_timestamp);
273 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id); 220 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id);
274 } 221 }
275 222
276 // Tests the part where a new account is added with a token, to the point when 223 // Tests the part where a new account is added with a token, to the point when
277 // GCM message is sent. 224 // GCM message is sent.
278 TEST_F(GCMAccountMapperTest, AddMappingToMessageSent) { 225 TEST_F(GCMAccountMapperTest, AddMappingToMessageSent) {
279 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 226 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId);
280 227
281 std::vector<GCMClient::AccountTokenInfo> account_tokens; 228 std::vector<GCMClient::AccountTokenInfo> account_tokens;
282 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 229 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
283 account_tokens.push_back(account_token); 230 account_tokens.push_back(account_token);
284 mapper()->SetAccountTokens(account_tokens); 231 mapper()->SetAccountTokens(account_tokens);
285 232
286 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 233 std::vector<AccountMapping> mappings = GetAccounts();
287 EXPECT_EQ(1UL, mappings.size()); 234 EXPECT_EQ(1UL, mappings.size());
288 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 235 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
289 EXPECT_EQ("acc_id", iter->account_id); 236 EXPECT_EQ("acc_id", iter->account_id);
290 EXPECT_EQ("acc_id@gmail.com", iter->email); 237 EXPECT_EQ("acc_id@gmail.com", iter->email);
291 EXPECT_EQ("acc_id_token", iter->access_token); 238 EXPECT_EQ("acc_id_token", iter->access_token);
292 EXPECT_EQ(AccountMapping::NEW, iter->status); 239 EXPECT_EQ(AccountMapping::NEW, iter->status);
293 EXPECT_EQ(base::Time(), iter->status_change_timestamp); 240 EXPECT_EQ(base::Time(), iter->status_change_timestamp);
294 241
295 EXPECT_TRUE(!gcm_driver().last_message_id().empty()); 242 EXPECT_TRUE(!gcm_driver().last_message_id().empty());
296 } 243 }
297 244
298 // Tests the part where GCM message is successfully queued. 245 // Tests the part where GCM message is successfully queued.
(...skipping 12 matching lines...) Expand all
311 EXPECT_EQ(account_token.account_id, 258 EXPECT_EQ(account_token.account_id,
312 gcm_driver().last_account_mapping().account_id); 259 gcm_driver().last_account_mapping().account_id);
313 EXPECT_EQ(account_token.access_token, 260 EXPECT_EQ(account_token.access_token,
314 gcm_driver().last_account_mapping().access_token); 261 gcm_driver().last_account_mapping().access_token);
315 EXPECT_EQ(AccountMapping::ADDING, gcm_driver().last_account_mapping().status); 262 EXPECT_EQ(AccountMapping::ADDING, gcm_driver().last_account_mapping().status);
316 EXPECT_EQ(clock()->Now(), 263 EXPECT_EQ(clock()->Now(),
317 gcm_driver().last_account_mapping().status_change_timestamp); 264 gcm_driver().last_account_mapping().status_change_timestamp);
318 EXPECT_EQ(gcm_driver().last_message_id(), 265 EXPECT_EQ(gcm_driver().last_message_id(),
319 gcm_driver().last_account_mapping().last_message_id); 266 gcm_driver().last_account_mapping().last_message_id);
320 267
321 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 268 std::vector<AccountMapping> mappings = GetAccounts();
322 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 269 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
323 EXPECT_EQ(account_token.email, iter->email); 270 EXPECT_EQ(account_token.email, iter->email);
324 EXPECT_EQ(account_token.account_id, iter->account_id); 271 EXPECT_EQ(account_token.account_id, iter->account_id);
325 EXPECT_EQ(account_token.access_token, iter->access_token); 272 EXPECT_EQ(account_token.access_token, iter->access_token);
326 EXPECT_EQ(AccountMapping::ADDING, iter->status); 273 EXPECT_EQ(AccountMapping::ADDING, iter->status);
327 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 274 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
328 EXPECT_EQ(gcm_driver().last_message_id(), iter->last_message_id); 275 EXPECT_EQ(gcm_driver().last_message_id(), iter->last_message_id);
329 } 276 }
330 277
331 // Tests status change from ADDING to MAPPED (Message is acknowledged). 278 // Tests status change from ADDING to MAPPED (Message is acknowledged).
332 TEST_F(GCMAccountMapperTest, AddMappingMessageAcknowledged) { 279 TEST_F(GCMAccountMapperTest, AddMappingMessageAcknowledged) {
333 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 280 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId);
334 281
335 std::vector<GCMClient::AccountTokenInfo> account_tokens; 282 std::vector<GCMClient::AccountTokenInfo> account_tokens;
336 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 283 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
337 account_tokens.push_back(account_token); 284 account_tokens.push_back(account_token);
338 mapper()->SetAccountTokens(account_tokens); 285 mapper()->SetAccountTokens(account_tokens);
339 286
340 clock()->SetNow(base::Time::Now()); 287 clock()->SetNow(base::Time::Now());
341 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 288 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
342 clock()->SetNow(base::Time::Now()); 289 clock()->SetNow(base::Time::Now());
343 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 290 gcm_driver().SendAcknowledged(gcm_driver().last_message_id());
344 291
345 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email); 292 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email);
346 EXPECT_EQ(account_token.account_id, 293 EXPECT_EQ(account_token.account_id,
347 gcm_driver().last_account_mapping().account_id); 294 gcm_driver().last_account_mapping().account_id);
348 EXPECT_EQ(account_token.access_token, 295 EXPECT_EQ(account_token.access_token,
349 gcm_driver().last_account_mapping().access_token); 296 gcm_driver().last_account_mapping().access_token);
350 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status); 297 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status);
351 EXPECT_EQ(clock()->Now(), 298 EXPECT_EQ(clock()->Now(),
352 gcm_driver().last_account_mapping().status_change_timestamp); 299 gcm_driver().last_account_mapping().status_change_timestamp);
353 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 300 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
354 301
355 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 302 std::vector<AccountMapping> mappings = GetAccounts();
356 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 303 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
357 EXPECT_EQ(account_token.email, iter->email); 304 EXPECT_EQ(account_token.email, iter->email);
358 EXPECT_EQ(account_token.account_id, iter->account_id); 305 EXPECT_EQ(account_token.account_id, iter->account_id);
359 EXPECT_EQ(account_token.access_token, iter->access_token); 306 EXPECT_EQ(account_token.access_token, iter->access_token);
360 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 307 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
361 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 308 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
362 EXPECT_TRUE(iter->last_message_id.empty()); 309 EXPECT_TRUE(iter->last_message_id.empty());
363 } 310 }
364 311
365 // Tests status change form ADDING to MAPPED (When message was acknowledged, 312 // Tests status change form ADDING to MAPPED (When message was acknowledged,
366 // after Chrome was restarted). 313 // after Chrome was restarted).
367 TEST_F(GCMAccountMapperTest, AddMappingMessageAckedAfterRestart) { 314 TEST_F(GCMAccountMapperTest, AddMappingMessageAckedAfterRestart) {
368 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 315 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId);
369 316
370 std::vector<GCMClient::AccountTokenInfo> account_tokens; 317 std::vector<GCMClient::AccountTokenInfo> account_tokens;
371 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 318 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
372 account_tokens.push_back(account_token); 319 account_tokens.push_back(account_token);
373 mapper()->SetAccountTokens(account_tokens); 320 mapper()->SetAccountTokens(account_tokens);
374 321
375 clock()->SetNow(base::Time::Now()); 322 clock()->SetNow(base::Time::Now());
376 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 323 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
377 324
378 Restart(); 325 Restart();
379 GCMAccountMapper::AccountMappings stored_mappings; 326 std::vector<AccountMapping> stored_mappings;
380 stored_mappings.push_back(gcm_driver().last_account_mapping()); 327 stored_mappings.push_back(gcm_driver().last_account_mapping());
381 mapper()->Initialize(stored_mappings, kRegistrationId); 328 mapper()->Initialize(stored_mappings, kRegistrationId);
382 329
383 clock()->SetNow(base::Time::Now()); 330 clock()->SetNow(base::Time::Now());
384 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 331 gcm_driver().SendAcknowledged(gcm_driver().last_message_id());
385 332
386 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email); 333 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email);
387 EXPECT_EQ(account_token.account_id, 334 EXPECT_EQ(account_token.account_id,
388 gcm_driver().last_account_mapping().account_id); 335 gcm_driver().last_account_mapping().account_id);
389 EXPECT_EQ(account_token.access_token, 336 EXPECT_EQ(account_token.access_token,
390 gcm_driver().last_account_mapping().access_token); 337 gcm_driver().last_account_mapping().access_token);
391 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status); 338 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status);
392 EXPECT_EQ(clock()->Now(), 339 EXPECT_EQ(clock()->Now(),
393 gcm_driver().last_account_mapping().status_change_timestamp); 340 gcm_driver().last_account_mapping().status_change_timestamp);
394 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 341 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
395 342
396 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 343 std::vector<AccountMapping> mappings = GetAccounts();
397 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 344 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
398 EXPECT_EQ(account_token.email, iter->email); 345 EXPECT_EQ(account_token.email, iter->email);
399 EXPECT_EQ(account_token.account_id, iter->account_id); 346 EXPECT_EQ(account_token.account_id, iter->account_id);
400 EXPECT_EQ(account_token.access_token, iter->access_token); 347 EXPECT_EQ(account_token.access_token, iter->access_token);
401 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 348 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
402 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 349 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
403 EXPECT_TRUE(iter->last_message_id.empty()); 350 EXPECT_TRUE(iter->last_message_id.empty());
404 } 351 }
405 352
406 // Tests a case when ADD message times out for a new account. 353 // Tests a case when ADD message times out for a new account.
407 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForNewAccount) { 354 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForNewAccount) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 stored_mappings.push_back(mapping); 386 stored_mappings.push_back(mapping);
440 mapper()->Initialize(stored_mappings, kRegistrationId); 387 mapper()->Initialize(stored_mappings, kRegistrationId);
441 388
442 clock()->SetNow(base::Time::Now()); 389 clock()->SetNow(base::Time::Now());
443 gcm_driver().MessageSendError("add_message_id"); 390 gcm_driver().MessageSendError("add_message_id");
444 391
445 // No new message is sent because of the send error, as the token is stale. 392 // No new message is sent because of the send error, as the token is stale.
446 // Because the account was new, the entry should be deleted. 393 // Because the account was new, the entry should be deleted.
447 EXPECT_TRUE(gcm_driver().last_message_id().empty()); 394 EXPECT_TRUE(gcm_driver().last_message_id().empty());
448 395
449 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 396 std::vector<AccountMapping> mappings = GetAccounts();
450 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 397 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
451 EXPECT_EQ(mapping.email, iter->email); 398 EXPECT_EQ(mapping.email, iter->email);
452 EXPECT_EQ(mapping.account_id, iter->account_id); 399 EXPECT_EQ(mapping.account_id, iter->account_id);
453 EXPECT_EQ(mapping.access_token, iter->access_token); 400 EXPECT_EQ(mapping.access_token, iter->access_token);
454 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 401 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
455 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp); 402 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp);
456 EXPECT_TRUE(iter->last_message_id.empty()); 403 EXPECT_TRUE(iter->last_message_id.empty());
457 } 404 }
458 405
459 // Tests that a missing token for an account will trigger removing of that 406 // Tests that a missing token for an account will trigger removing of that
460 // account. This test goes only until the message is passed to GCM. 407 // account. This test goes only until the message is passed to GCM.
(...skipping 12 matching lines...) Expand all
473 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 420 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
474 421
475 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 422 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
476 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 423 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
477 EXPECT_EQ(AccountMapping::REMOVING, 424 EXPECT_EQ(AccountMapping::REMOVING,
478 gcm_driver().last_account_mapping().status); 425 gcm_driver().last_account_mapping().status);
479 EXPECT_EQ(clock()->Now(), 426 EXPECT_EQ(clock()->Now(),
480 gcm_driver().last_account_mapping().status_change_timestamp); 427 gcm_driver().last_account_mapping().status_change_timestamp);
481 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 428 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
482 429
483 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 430 std::vector<AccountMapping> mappings = GetAccounts();
484 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 431 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
485 EXPECT_EQ(mapping.email, iter->email); 432 EXPECT_EQ(mapping.email, iter->email);
486 EXPECT_EQ(mapping.account_id, iter->account_id); 433 EXPECT_EQ(mapping.account_id, iter->account_id);
487 EXPECT_EQ(mapping.access_token, iter->access_token); 434 EXPECT_EQ(mapping.access_token, iter->access_token);
488 EXPECT_EQ(AccountMapping::REMOVING, iter->status); 435 EXPECT_EQ(AccountMapping::REMOVING, iter->status);
489 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 436 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
490 EXPECT_TRUE(iter->last_message_id.empty()); 437 EXPECT_TRUE(iter->last_message_id.empty());
491 } 438 }
492 439
493 // Tests that a missing token for an account will trigger removing of that 440 // Tests that a missing token for an account will trigger removing of that
494 // account. This test goes until the message is queued by GCM. 441 // account. This test goes until the message is queued by GCM.
(...skipping 15 matching lines...) Expand all
510 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 457 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
511 458
512 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 459 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
513 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 460 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
514 EXPECT_EQ(AccountMapping::REMOVING, 461 EXPECT_EQ(AccountMapping::REMOVING,
515 gcm_driver().last_account_mapping().status); 462 gcm_driver().last_account_mapping().status);
516 EXPECT_EQ(status_change_timestamp, 463 EXPECT_EQ(status_change_timestamp,
517 gcm_driver().last_account_mapping().status_change_timestamp); 464 gcm_driver().last_account_mapping().status_change_timestamp);
518 EXPECT_TRUE(!gcm_driver().last_account_mapping().last_message_id.empty()); 465 EXPECT_TRUE(!gcm_driver().last_account_mapping().last_message_id.empty());
519 466
520 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 467 std::vector<AccountMapping> mappings = GetAccounts();
521 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 468 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
522 EXPECT_EQ(mapping.email, iter->email); 469 EXPECT_EQ(mapping.email, iter->email);
523 EXPECT_EQ(mapping.account_id, iter->account_id); 470 EXPECT_EQ(mapping.account_id, iter->account_id);
524 EXPECT_EQ(mapping.access_token, iter->access_token); 471 EXPECT_EQ(mapping.access_token, iter->access_token);
525 EXPECT_EQ(AccountMapping::REMOVING, iter->status); 472 EXPECT_EQ(AccountMapping::REMOVING, iter->status);
526 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp); 473 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp);
527 EXPECT_EQ(gcm_driver().last_account_mapping().last_message_id, 474 EXPECT_EQ(gcm_driver().last_account_mapping().last_message_id,
528 iter->last_message_id); 475 iter->last_message_id);
529 } 476 }
530 477
531 // Tests that a missing token for an account will trigger removing of that 478 // Tests that a missing token for an account will trigger removing of that
532 // account. This test goes until the message is acknowledged by GCM. 479 // account. This test goes until the message is acknowledged by GCM.
533 // This is a complete success scenario for account removal, and it end with 480 // This is a complete success scenario for account removal, and it end with
534 // account mapping being completely gone. 481 // account mapping being completely gone.
535 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAcknowledged) { 482 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAcknowledged) {
536 // Start with one account that is mapped. 483 // Start with one account that is mapped.
537 AccountMapping mapping = MakeAccountMapping("acc_id", 484 AccountMapping mapping = MakeAccountMapping("acc_id",
538 AccountMapping::MAPPED, 485 AccountMapping::MAPPED,
539 base::Time::Now(), 486 base::Time::Now(),
540 std::string()); 487 std::string());
541 488
542 GCMAccountMapper::AccountMappings stored_mappings; 489 GCMAccountMapper::AccountMappings stored_mappings;
543 stored_mappings.push_back(mapping); 490 stored_mappings.push_back(mapping);
544 mapper()->Initialize(stored_mappings, kRegistrationId); 491 mapper()->Initialize(stored_mappings, kRegistrationId);
545 clock()->SetNow(base::Time::Now()); 492 clock()->SetNow(base::Time::Now());
546 493
547 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 494 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
548 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 495 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
549 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 496 gcm_driver().SendAcknowledged(gcm_driver().last_message_id());
550 497
551 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id()); 498 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id());
552 499
553 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 500 std::vector<AccountMapping> mappings = GetAccounts();
554 EXPECT_TRUE(mappings.empty()); 501 EXPECT_TRUE(mappings.empty());
555 } 502 }
556 503
557 // Tests that account removing proceeds, when a removing message is acked after 504 // Tests that account removing proceeds, when a removing message is acked after
558 // Chrome was restarted. 505 // Chrome was restarted.
559 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAckedAfterRestart) { 506 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAckedAfterRestart) {
560 // Start with one account that is mapped. 507 // Start with one account that is mapped.
561 AccountMapping mapping = MakeAccountMapping("acc_id", 508 AccountMapping mapping = MakeAccountMapping("acc_id",
562 AccountMapping::REMOVING, 509 AccountMapping::REMOVING,
563 base::Time::Now(), 510 base::Time::Now(),
564 "remove_message_id"); 511 "remove_message_id");
565 512
566 GCMAccountMapper::AccountMappings stored_mappings; 513 GCMAccountMapper::AccountMappings stored_mappings;
567 stored_mappings.push_back(mapping); 514 stored_mappings.push_back(mapping);
568 mapper()->Initialize(stored_mappings, kRegistrationId); 515 mapper()->Initialize(stored_mappings, kRegistrationId);
569 516
570 gcm_driver().AcknowledgeSend("remove_message_id"); 517 gcm_driver().SendAcknowledged("remove_message_id");
571 518
572 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id()); 519 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id());
573 520
574 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 521 std::vector<AccountMapping> mappings = GetAccounts();
575 EXPECT_TRUE(mappings.empty()); 522 EXPECT_TRUE(mappings.empty());
576 } 523 }
577 524
578 // Tests that account removing proceeds, when a removing message is acked after 525 // Tests that account removing proceeds, when a removing message is acked after
579 // Chrome was restarted. 526 // Chrome was restarted.
580 TEST_F(GCMAccountMapperTest, RemoveMappingMessageSendError) { 527 TEST_F(GCMAccountMapperTest, RemoveMappingMessageSendError) {
581 // Start with one account that is mapped. 528 // Start with one account that is mapped.
582 base::Time status_change_timestamp = base::Time::Now(); 529 base::Time status_change_timestamp = base::Time::Now();
583 AccountMapping mapping = MakeAccountMapping("acc_id", 530 AccountMapping mapping = MakeAccountMapping("acc_id",
584 AccountMapping::REMOVING, 531 AccountMapping::REMOVING,
(...skipping 11 matching lines...) Expand all
596 543
597 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 544 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
598 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 545 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
599 EXPECT_EQ(AccountMapping::REMOVING, 546 EXPECT_EQ(AccountMapping::REMOVING,
600 gcm_driver().last_account_mapping().status); 547 gcm_driver().last_account_mapping().status);
601 EXPECT_EQ(status_change_timestamp, 548 EXPECT_EQ(status_change_timestamp,
602 gcm_driver().last_account_mapping().status_change_timestamp); 549 gcm_driver().last_account_mapping().status_change_timestamp);
603 // Message is not persisted, until send is completed. 550 // Message is not persisted, until send is completed.
604 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 551 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
605 552
606 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 553 std::vector<AccountMapping> mappings = GetAccounts();
607 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 554 std::vector<AccountMapping>::const_iterator iter = mappings.begin();
608 EXPECT_EQ(mapping.email, iter->email); 555 EXPECT_EQ(mapping.email, iter->email);
609 EXPECT_EQ(mapping.account_id, iter->account_id); 556 EXPECT_EQ(mapping.account_id, iter->account_id);
610 EXPECT_TRUE(iter->access_token.empty()); 557 EXPECT_TRUE(iter->access_token.empty());
611 EXPECT_EQ(AccountMapping::REMOVING, iter->status); 558 EXPECT_EQ(AccountMapping::REMOVING, iter->status);
612 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp); 559 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp);
613 EXPECT_TRUE(iter->last_message_id.empty()); 560 EXPECT_TRUE(iter->last_message_id.empty());
614 } 561 }
615 562
616 // Tests that, if a new token arrives when the adding message is in progress
617 // no new message is sent and account mapper still waits for the first one to
618 // complete.
619 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenAdding) {
620 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId);
621
622 clock()->SetNow(base::Time::Now());
623 std::vector<GCMClient::AccountTokenInfo> account_tokens;
624 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
625 account_tokens.push_back(account_token);
626 mapper()->SetAccountTokens(account_tokens);
627 DCHECK_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action());
628
629 clock()->SetNow(base::Time::Now());
630 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
631 DCHECK_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action());
632
633 // Providing another token and clearing status.
634 gcm_driver().Clear();
635 mapper()->SetAccountTokens(account_tokens);
636 DCHECK_EQ(CustomFakeGCMDriver::NONE, gcm_driver().last_action());
637 }
638
639 // Tests that, if a new token arrives when a removing message is in progress
640 // a new adding message is sent and while account mapping status is changed to
641 // mapped. If the original Removing message arrives it is discarded.
642 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenRemoving) {
643 // Start with one account that is mapped.
644 AccountMapping mapping = MakeAccountMapping(
645 "acc_id", AccountMapping::MAPPED, base::Time::Now(), std::string());
646
647 GCMAccountMapper::AccountMappings stored_mappings;
648 stored_mappings.push_back(mapping);
649 mapper()->Initialize(stored_mappings, kRegistrationId);
650 clock()->SetNow(base::Time::Now());
651
652 // Remove the token to trigger a remove message to be sent
653 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
654 EXPECT_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action());
655 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
656 EXPECT_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action());
657
658 std::string remove_message_id = gcm_driver().last_message_id();
659 gcm_driver().Clear();
660
661 // The account mapping for acc_id is now in status REMOVING.
662 // Adding the token for that account.
663 clock()->SetNow(base::Time::Now());
664 std::vector<GCMClient::AccountTokenInfo> account_tokens;
665 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
666 account_tokens.push_back(account_token);
667 mapper()->SetAccountTokens(account_tokens);
668 DCHECK_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action());
669 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
670 EXPECT_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action());
671
672 std::string add_message_id = gcm_driver().last_message_id();
673
674 // A remove message confirmation arrives now, but should be ignored.
675 gcm_driver().AcknowledgeSend(remove_message_id);
676
677 GCMAccountMapper::AccountMappings mappings = GetAccounts();
678 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
679 EXPECT_EQ(mapping.email, iter->email);
680 EXPECT_EQ(mapping.account_id, iter->account_id);
681 EXPECT_FALSE(iter->access_token.empty());
682 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
683 // Status change timestamp is set to very long time ago, to make sure the next
684 // round of mapping picks it up.
685 EXPECT_EQ(base::Time(), iter->status_change_timestamp);
686 EXPECT_EQ(add_message_id, iter->last_message_id);
687 }
688
689 // Tests adding/removing works for multiple accounts, after a restart and when
690 // tokens are periodically delierverd.
691 TEST_F(GCMAccountMapperTest, MultipleAccountMappings) {
692 clock()->SetNow(base::Time::Now());
693 base::Time half_hour_ago = clock()->Now() - base::TimeDelta::FromMinutes(30);
694 GCMAccountMapper::AccountMappings stored_mappings;
695 stored_mappings.push_back(MakeAccountMapping(
696 "acc_id_0", AccountMapping::ADDING, half_hour_ago, "acc_id_0_msg"));
697 stored_mappings.push_back(MakeAccountMapping(
698 "acc_id_1", AccountMapping::MAPPED, half_hour_ago, "acc_id_1_msg"));
699 stored_mappings.push_back(MakeAccountMapping(
700 "acc_id_2", AccountMapping::REMOVING, half_hour_ago, "acc_id_2_msg"));
701
702 mapper()->Initialize(stored_mappings, kRegistrationId);
703
704 GCMAccountMapper::AccountMappings expected_mappings(stored_mappings);
705
706 // Finish messages after a restart.
707 clock()->SetNow(base::Time::Now());
708 gcm_driver().AcknowledgeSend(expected_mappings[0].last_message_id);
709 expected_mappings[0].status_change_timestamp = clock()->Now();
710 expected_mappings[0].status = AccountMapping::MAPPED;
711 expected_mappings[0].last_message_id.clear();
712
713 clock()->SetNow(base::Time::Now());
714 gcm_driver().AcknowledgeSend(expected_mappings[1].last_message_id);
715 expected_mappings[1].status_change_timestamp = clock()->Now();
716 expected_mappings[1].status = AccountMapping::MAPPED;
717 expected_mappings[1].last_message_id.clear();
718
719 // Upon success last element is removed.
720 clock()->SetNow(base::Time::Now());
721 gcm_driver().AcknowledgeSend(expected_mappings[2].last_message_id);
722 expected_mappings.pop_back();
723
724 GCMAccountMapper::AccountMappings mappings = GetAccounts();
725
726 EXPECT_EQ(expected_mappings.size(), mappings.size());
727 GCMAccountMapper::AccountMappings::const_iterator expected_iter =
728 expected_mappings.begin();
729 GCMAccountMapper::AccountMappings::const_iterator actual_iter =
730 mappings.begin();
731
732 for (; expected_iter != expected_mappings.end() &&
733 actual_iter != mappings.end();
734 ++expected_iter, ++actual_iter) {
735 EXPECT_EQ(expected_iter->email, actual_iter->email);
736 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
737 EXPECT_EQ(expected_iter->status, actual_iter->status);
738 EXPECT_EQ(expected_iter->status_change_timestamp,
739 actual_iter->status_change_timestamp);
740 }
741
742 // One of accounts gets removed.
743 std::vector<GCMClient::AccountTokenInfo> account_tokens;
744 account_tokens.push_back(MakeAccountTokenInfo("acc_id_0"));
745
746 // Advance a day to make sure existing mappings will be reported.
747 clock()->SetNow(clock()->Now() + base::TimeDelta::FromDays(1));
748 mapper()->SetAccountTokens(account_tokens);
749
750 expected_mappings[0].status = AccountMapping::MAPPED;
751 expected_mappings[1].status = AccountMapping::REMOVING;
752 expected_mappings[1].status_change_timestamp = clock()->Now();
753
754 gcm_driver().CompleteSendAllMessages();
755
756 for (; expected_iter != expected_mappings.end() &&
757 actual_iter != mappings.end();
758 ++expected_iter, ++actual_iter) {
759 EXPECT_EQ(expected_iter->email, actual_iter->email);
760 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
761 EXPECT_EQ(expected_iter->status, actual_iter->status);
762 EXPECT_EQ(expected_iter->status_change_timestamp,
763 actual_iter->status_change_timestamp);
764 }
765
766 clock()->SetNow(clock()->Now() + base::TimeDelta::FromSeconds(5));
767 gcm_driver().AcknowledgeSendAllMessages();
768
769 expected_mappings[0].status_change_timestamp = clock()->Now();
770 expected_mappings.pop_back();
771
772 for (; expected_iter != expected_mappings.end() &&
773 actual_iter != mappings.end();
774 ++expected_iter, ++actual_iter) {
775 EXPECT_EQ(expected_iter->email, actual_iter->email);
776 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
777 EXPECT_EQ(expected_iter->status, actual_iter->status);
778 EXPECT_EQ(expected_iter->status_change_timestamp,
779 actual_iter->status_change_timestamp);
780 }
781
782 account_tokens.clear();
783 account_tokens.push_back(MakeAccountTokenInfo("acc_id_0"));
784 account_tokens.push_back(MakeAccountTokenInfo("acc_id_3"));
785 account_tokens.push_back(MakeAccountTokenInfo("acc_id_4"));
786
787 // Advance a day to make sure existing mappings will be reported.
788 clock()->SetNow(clock()->Now() + base::TimeDelta::FromDays(1));
789 mapper()->SetAccountTokens(account_tokens);
790
791 // Mapping from acc_id_0 still in position 0
792 expected_mappings.push_back(MakeAccountMapping(
793 "acc_id_3", AccountMapping::ADDING, base::Time(), std::string()));
794 expected_mappings.push_back(MakeAccountMapping(
795 "acc_id_4", AccountMapping::ADDING, base::Time(), std::string()));
796
797 for (; expected_iter != expected_mappings.end() &&
798 actual_iter != mappings.end();
799 ++expected_iter, ++actual_iter) {
800 EXPECT_EQ(expected_iter->email, actual_iter->email);
801 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
802 EXPECT_EQ(expected_iter->status, actual_iter->status);
803 EXPECT_EQ(expected_iter->status_change_timestamp,
804 actual_iter->status_change_timestamp);
805 }
806
807 clock()->SetNow(clock()->Now() + base::TimeDelta::FromSeconds(1));
808 gcm_driver().CompleteSendAllMessages();
809
810 expected_mappings[1].status_change_timestamp = clock()->Now();
811 expected_mappings[2].status_change_timestamp = clock()->Now();
812
813 for (; expected_iter != expected_mappings.end() &&
814 actual_iter != mappings.end();
815 ++expected_iter, ++actual_iter) {
816 EXPECT_EQ(expected_iter->email, actual_iter->email);
817 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
818 EXPECT_EQ(expected_iter->status, actual_iter->status);
819 EXPECT_EQ(expected_iter->status_change_timestamp,
820 actual_iter->status_change_timestamp);
821 }
822
823 clock()->SetNow(clock()->Now() + base::TimeDelta::FromSeconds(5));
824 gcm_driver().AcknowledgeSendAllMessages();
825
826 expected_mappings[0].status_change_timestamp = clock()->Now();
827 expected_mappings[1].status_change_timestamp = clock()->Now();
828 expected_mappings[1].status = AccountMapping::MAPPED;
829 expected_mappings[2].status_change_timestamp = clock()->Now();
830 expected_mappings[2].status = AccountMapping::MAPPED;
831
832 for (; expected_iter != expected_mappings.end() &&
833 actual_iter != mappings.end();
834 ++expected_iter, ++actual_iter) {
835 EXPECT_EQ(expected_iter->email, actual_iter->email);
836 EXPECT_EQ(expected_iter->account_id, actual_iter->account_id);
837 EXPECT_EQ(expected_iter->status, actual_iter->status);
838 EXPECT_EQ(expected_iter->status_change_timestamp,
839 actual_iter->status_change_timestamp);
840 }
841 }
842
843 } // namespace gcm 563 } // namespace gcm
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698