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

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

Issue 580603002: [GCM] Adding registration ID request and tests to GCM Account Mapper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing CR feedback 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 | « components/gcm_driver/gcm_account_mapper.cc ('k') | 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 80
81 CustomFakeGCMDriver(); 81 CustomFakeGCMDriver();
82 virtual ~CustomFakeGCMDriver(); 82 virtual ~CustomFakeGCMDriver();
83 83
84 virtual void UpdateAccountMapping( 84 virtual void UpdateAccountMapping(
85 const AccountMapping& account_mapping) OVERRIDE; 85 const AccountMapping& account_mapping) OVERRIDE;
86 virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE; 86 virtual void RemoveAccountMapping(const std::string& account_id) OVERRIDE;
87 virtual void AddAppHandler(const std::string& app_id, 87 virtual void AddAppHandler(const std::string& app_id,
88 GCMAppHandler* handler) OVERRIDE; 88 GCMAppHandler* handler) OVERRIDE;
89 virtual void RemoveAppHandler(const std::string& app_id) OVERRIDE; 89 virtual void RemoveAppHandler(const std::string& app_id) OVERRIDE;
90 virtual void RegisterImpl(
91 const std::string& app_id,
92 const std::vector<std::string>& sender_ids) OVERRIDE;
90 93
94 void CompleteRegister(const std::string& registration_id,
95 GCMClient::Result result);
91 void CompleteSend(const std::string& message_id, GCMClient::Result result); 96 void CompleteSend(const std::string& message_id, GCMClient::Result result);
92 void AcknowledgeSend(const std::string& message_id); 97 void AcknowledgeSend(const std::string& message_id);
93 void MessageSendError(const std::string& message_id); 98 void MessageSendError(const std::string& message_id);
94 99
95 void CompleteSendAllMessages(); 100 void CompleteSendAllMessages();
96 void AcknowledgeSendAllMessages(); 101 void AcknowledgeSendAllMessages();
97 102
98 void SetLastMessageAction(const std::string& message_id, 103 void SetLastMessageAction(const std::string& message_id,
99 LastMessageAction action); 104 LastMessageAction action);
100 void Clear(); 105 void Clear();
101 106
102 const AccountMapping& last_account_mapping() const { 107 const AccountMapping& last_account_mapping() const {
103 return account_mapping_; 108 return account_mapping_;
104 } 109 }
105 const std::string& last_message_id() const { return last_message_id_; } 110 const std::string& last_message_id() const { return last_message_id_; }
106 const std::string& last_removed_account_id() const { 111 const std::string& last_removed_account_id() const {
107 return last_removed_account_id_; 112 return last_removed_account_id_;
108 } 113 }
109 LastMessageAction last_action() const { return last_action_; } 114 LastMessageAction last_action() const { return last_action_; }
115 bool registration_id_requested() const { return registration_id_requested_; }
110 116
111 protected: 117 protected:
112 virtual void SendImpl(const std::string& app_id, 118 virtual void SendImpl(const std::string& app_id,
113 const std::string& receiver_id, 119 const std::string& receiver_id,
114 const GCMClient::OutgoingMessage& message) OVERRIDE; 120 const GCMClient::OutgoingMessage& message) OVERRIDE;
115 121
116 private: 122 private:
117 AccountMapping account_mapping_; 123 AccountMapping account_mapping_;
118 std::string last_message_id_; 124 std::string last_message_id_;
119 std::string last_removed_account_id_; 125 std::string last_removed_account_id_;
120 LastMessageAction last_action_; 126 LastMessageAction last_action_;
121 std::map<std::string, LastMessageAction> all_messages_; 127 std::map<std::string, LastMessageAction> all_messages_;
128 bool registration_id_requested_;
122 }; 129 };
123 130
124 CustomFakeGCMDriver::CustomFakeGCMDriver() : last_action_(NONE) { 131 CustomFakeGCMDriver::CustomFakeGCMDriver()
132 : last_action_(NONE), registration_id_requested_(false) {
125 } 133 }
126 134
127 CustomFakeGCMDriver::~CustomFakeGCMDriver() { 135 CustomFakeGCMDriver::~CustomFakeGCMDriver() {
128 } 136 }
129 137
130 void CustomFakeGCMDriver::UpdateAccountMapping( 138 void CustomFakeGCMDriver::UpdateAccountMapping(
131 const AccountMapping& account_mapping) { 139 const AccountMapping& account_mapping) {
132 account_mapping_.email = account_mapping.email; 140 account_mapping_.email = account_mapping.email;
133 account_mapping_.account_id = account_mapping.account_id; 141 account_mapping_.account_id = account_mapping.account_id;
134 account_mapping_.access_token = account_mapping.access_token; 142 account_mapping_.access_token = account_mapping.access_token;
135 account_mapping_.status = account_mapping.status; 143 account_mapping_.status = account_mapping.status;
136 account_mapping_.status_change_timestamp = 144 account_mapping_.status_change_timestamp =
137 account_mapping.status_change_timestamp; 145 account_mapping.status_change_timestamp;
138 account_mapping_.last_message_id = account_mapping.last_message_id; 146 account_mapping_.last_message_id = account_mapping.last_message_id;
139 } 147 }
140 148
141 void CustomFakeGCMDriver::RemoveAccountMapping(const std::string& account_id) { 149 void CustomFakeGCMDriver::RemoveAccountMapping(const std::string& account_id) {
142 last_removed_account_id_ = account_id; 150 last_removed_account_id_ = account_id;
143 } 151 }
144 152
145 void CustomFakeGCMDriver::AddAppHandler(const std::string& app_id, 153 void CustomFakeGCMDriver::AddAppHandler(const std::string& app_id,
146 GCMAppHandler* handler) { 154 GCMAppHandler* handler) {
147 GCMDriver::AddAppHandler(app_id, handler); 155 GCMDriver::AddAppHandler(app_id, handler);
148 } 156 }
149 157
150 void CustomFakeGCMDriver::RemoveAppHandler(const std::string& app_id) { 158 void CustomFakeGCMDriver::RemoveAppHandler(const std::string& app_id) {
151 GCMDriver::RemoveAppHandler(app_id); 159 GCMDriver::RemoveAppHandler(app_id);
152 } 160 }
153 161
162 void CustomFakeGCMDriver::RegisterImpl(
163 const std::string& app_id,
164 const std::vector<std::string>& sender_ids) {
165 DCHECK_EQ(kGCMAccountMapperAppId, app_id);
166 DCHECK_EQ(1u, sender_ids.size());
167 DCHECK_EQ(kGCMAccountMapperSenderId, sender_ids[0]);
168 registration_id_requested_ = true;
169 }
170
171 void CustomFakeGCMDriver::CompleteRegister(const std::string& registration_id,
172 GCMClient::Result result) {
173 RegisterFinished(kGCMAccountMapperAppId, registration_id, result);
174 }
175
154 void CustomFakeGCMDriver::CompleteSend(const std::string& message_id, 176 void CustomFakeGCMDriver::CompleteSend(const std::string& message_id,
155 GCMClient::Result result) { 177 GCMClient::Result result) {
156 SendFinished(kGCMAccountMapperAppId, message_id, result); 178 SendFinished(kGCMAccountMapperAppId, message_id, result);
157 SetLastMessageAction(message_id, SEND_FINISHED); 179 SetLastMessageAction(message_id, SEND_FINISHED);
158 } 180 }
159 181
160 void CustomFakeGCMDriver::AcknowledgeSend(const std::string& message_id) { 182 void CustomFakeGCMDriver::AcknowledgeSend(const std::string& message_id) {
161 GetAppHandler(kGCMAccountMapperAppId) 183 GetAppHandler(kGCMAccountMapperAppId)
162 ->OnSendAcknowledged(kGCMAccountMapperAppId, message_id); 184 ->OnSendAcknowledged(kGCMAccountMapperAppId, message_id);
163 SetLastMessageAction(message_id, SEND_ACKNOWLEDGED); 185 SetLastMessageAction(message_id, SEND_ACKNOWLEDGED);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 if (iter->second == SEND_FINISHED) 220 if (iter->second == SEND_FINISHED)
199 AcknowledgeSend(iter->first); 221 AcknowledgeSend(iter->first);
200 } 222 }
201 } 223 }
202 224
203 void CustomFakeGCMDriver::Clear() { 225 void CustomFakeGCMDriver::Clear() {
204 account_mapping_ = AccountMapping(); 226 account_mapping_ = AccountMapping();
205 last_message_id_.clear(); 227 last_message_id_.clear();
206 last_removed_account_id_.clear(); 228 last_removed_account_id_.clear();
207 last_action_ = NONE; 229 last_action_ = NONE;
230 registration_id_requested_ = false;
208 } 231 }
209 232
210 void CustomFakeGCMDriver::SetLastMessageAction(const std::string& message_id, 233 void CustomFakeGCMDriver::SetLastMessageAction(const std::string& message_id,
211 LastMessageAction action) { 234 LastMessageAction action) {
212 last_action_ = action; 235 last_action_ = action;
213 last_message_id_ = message_id; 236 last_message_id_ = message_id;
214 all_messages_[message_id] = action; 237 all_messages_[message_id] = action;
215 } 238 }
216 239
217 } // namespace 240 } // namespace
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 void GCMAccountMapperTest::Restart() { 272 void GCMAccountMapperTest::Restart() {
250 if (account_mapper_) 273 if (account_mapper_)
251 account_mapper_->ShutdownHandler(); 274 account_mapper_->ShutdownHandler();
252 account_mapper_.reset(new GCMAccountMapper(&gcm_driver_)); 275 account_mapper_.reset(new GCMAccountMapper(&gcm_driver_));
253 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); 276 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock);
254 clock_ = clock.get(); 277 clock_ = clock.get();
255 account_mapper_->SetClockForTesting(clock.PassAs<base::Clock>()); 278 account_mapper_->SetClockForTesting(clock.PassAs<base::Clock>());
256 } 279 }
257 280
258 // Tests the initialization of account mappings (from the store) when empty. 281 // Tests the initialization of account mappings (from the store) when empty.
282 // It also checks that initialization triggers registration ID request.
259 TEST_F(GCMAccountMapperTest, InitializeAccountMappingsEmpty) { 283 TEST_F(GCMAccountMapperTest, InitializeAccountMappingsEmpty) {
260 GCMAccountMapper::AccountMappings account_mappings; 284 EXPECT_FALSE(gcm_driver().registration_id_requested());
261 mapper()->Initialize(account_mappings, ""); 285 mapper()->Initialize(GCMAccountMapper::AccountMappings());
262 EXPECT_TRUE(GetAccounts().empty()); 286 EXPECT_TRUE(GetAccounts().empty());
287 EXPECT_TRUE(gcm_driver().registration_id_requested());
288 }
289
290 // Tests that registration is retried, when new tokens are delivered and in no
291 // other circumstances.
292 TEST_F(GCMAccountMapperTest, RegistrationRetryUponFailure) {
293 mapper()->Initialize(GCMAccountMapper::AccountMappings());
294 EXPECT_TRUE(gcm_driver().registration_id_requested());
295 gcm_driver().Clear();
296
297 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::UNKNOWN_ERROR);
298 EXPECT_FALSE(gcm_driver().registration_id_requested());
299 gcm_driver().Clear();
300
301 std::vector<GCMClient::AccountTokenInfo> account_tokens;
302 account_tokens.push_back(MakeAccountTokenInfo("acc_id2"));
303 mapper()->SetAccountTokens(account_tokens);
304 EXPECT_TRUE(gcm_driver().registration_id_requested());
305 gcm_driver().Clear();
306
307 gcm_driver().CompleteRegister(kRegistrationId,
308 GCMClient::ASYNC_OPERATION_PENDING);
309 EXPECT_FALSE(gcm_driver().registration_id_requested());
263 } 310 }
264 311
265 // Tests the initialization of account mappings (from the store). 312 // Tests the initialization of account mappings (from the store).
266 TEST_F(GCMAccountMapperTest, InitializeAccountMappings) { 313 TEST_F(GCMAccountMapperTest, InitializeAccountMappings) {
267 GCMAccountMapper::AccountMappings account_mappings; 314 GCMAccountMapper::AccountMappings account_mappings;
268 AccountMapping account_mapping1 = MakeAccountMapping("acc_id1", 315 AccountMapping account_mapping1 = MakeAccountMapping("acc_id1",
269 AccountMapping::MAPPED, 316 AccountMapping::MAPPED,
270 base::Time::Now(), 317 base::Time::Now(),
271 std::string()); 318 std::string());
272 AccountMapping account_mapping2 = MakeAccountMapping("acc_id2", 319 AccountMapping account_mapping2 = MakeAccountMapping("acc_id2",
273 AccountMapping::ADDING, 320 AccountMapping::ADDING,
274 base::Time::Now(), 321 base::Time::Now(),
275 "add_message_1"); 322 "add_message_1");
276 account_mappings.push_back(account_mapping1); 323 account_mappings.push_back(account_mapping1);
277 account_mappings.push_back(account_mapping2); 324 account_mappings.push_back(account_mapping2);
278 325
279 mapper()->Initialize(account_mappings, ""); 326 mapper()->Initialize(account_mappings);
280 327
281 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 328 GCMAccountMapper::AccountMappings mappings = GetAccounts();
282 EXPECT_EQ(2UL, mappings.size()); 329 EXPECT_EQ(2UL, mappings.size());
283 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 330 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
284 331
285 EXPECT_EQ(account_mapping1.account_id, iter->account_id); 332 EXPECT_EQ(account_mapping1.account_id, iter->account_id);
286 EXPECT_EQ(account_mapping1.email, iter->email); 333 EXPECT_EQ(account_mapping1.email, iter->email);
287 EXPECT_TRUE(account_mapping1.access_token.empty()); 334 EXPECT_TRUE(account_mapping1.access_token.empty());
288 EXPECT_EQ(account_mapping1.status, iter->status); 335 EXPECT_EQ(account_mapping1.status, iter->status);
289 EXPECT_EQ(account_mapping1.status_change_timestamp, 336 EXPECT_EQ(account_mapping1.status_change_timestamp,
290 iter->status_change_timestamp); 337 iter->status_change_timestamp);
291 EXPECT_TRUE(account_mapping1.last_message_id.empty()); 338 EXPECT_TRUE(account_mapping1.last_message_id.empty());
292 339
293 ++iter; 340 ++iter;
294 EXPECT_EQ(account_mapping2.account_id, iter->account_id); 341 EXPECT_EQ(account_mapping2.account_id, iter->account_id);
295 EXPECT_EQ(account_mapping2.email, iter->email); 342 EXPECT_EQ(account_mapping2.email, iter->email);
296 EXPECT_TRUE(account_mapping2.access_token.empty()); 343 EXPECT_TRUE(account_mapping2.access_token.empty());
297 EXPECT_EQ(account_mapping2.status, iter->status); 344 EXPECT_EQ(account_mapping2.status, iter->status);
298 EXPECT_EQ(account_mapping2.status_change_timestamp, 345 EXPECT_EQ(account_mapping2.status_change_timestamp,
299 iter->status_change_timestamp); 346 iter->status_change_timestamp);
300 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id); 347 EXPECT_EQ(account_mapping2.last_message_id, iter->last_message_id);
301 } 348 }
302 349
350 // Tests that account tokens are not processed until registration ID is
351 // available.
352 TEST_F(GCMAccountMapperTest, SetAccountTokensOnlyWorksWithRegisterationId) {
353 // Start with empty list.
354 mapper()->Initialize(GCMAccountMapper::AccountMappings());
355
356 std::vector<GCMClient::AccountTokenInfo> account_tokens;
357 account_tokens.push_back(MakeAccountTokenInfo("acc_id"));
358 mapper()->SetAccountTokens(account_tokens);
359
360 EXPECT_TRUE(GetAccounts().empty());
361
362 account_tokens.clear();
363 account_tokens.push_back(MakeAccountTokenInfo("acc_id1"));
364 account_tokens.push_back(MakeAccountTokenInfo("acc_id2"));
365 mapper()->SetAccountTokens(account_tokens);
366
367 EXPECT_TRUE(GetAccounts().empty());
368
369 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
370
371 GCMAccountMapper::AccountMappings mappings = GetAccounts();
372 EXPECT_EQ(2UL, mappings.size());
373 EXPECT_EQ("acc_id1", mappings[0].account_id);
374 EXPECT_EQ("acc_id2", mappings[1].account_id);
375 }
376
303 // Tests the part where a new account is added with a token, to the point when 377 // Tests the part where a new account is added with a token, to the point when
304 // GCM message is sent. 378 // GCM message is sent.
305 TEST_F(GCMAccountMapperTest, AddMappingToMessageSent) { 379 TEST_F(GCMAccountMapperTest, AddMappingToMessageSent) {
306 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 380 mapper()->Initialize(GCMAccountMapper::AccountMappings());
381 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
307 382
308 std::vector<GCMClient::AccountTokenInfo> account_tokens; 383 std::vector<GCMClient::AccountTokenInfo> account_tokens;
309 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 384 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
310 account_tokens.push_back(account_token); 385 account_tokens.push_back(account_token);
311 mapper()->SetAccountTokens(account_tokens); 386 mapper()->SetAccountTokens(account_tokens);
312 387
313 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 388 GCMAccountMapper::AccountMappings mappings = GetAccounts();
314 EXPECT_EQ(1UL, mappings.size()); 389 EXPECT_EQ(1UL, mappings.size());
315 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 390 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
316 EXPECT_EQ("acc_id", iter->account_id); 391 EXPECT_EQ("acc_id", iter->account_id);
317 EXPECT_EQ("acc_id@gmail.com", iter->email); 392 EXPECT_EQ("acc_id@gmail.com", iter->email);
318 EXPECT_EQ("acc_id_token", iter->access_token); 393 EXPECT_EQ("acc_id_token", iter->access_token);
319 EXPECT_EQ(AccountMapping::NEW, iter->status); 394 EXPECT_EQ(AccountMapping::NEW, iter->status);
320 EXPECT_EQ(base::Time(), iter->status_change_timestamp); 395 EXPECT_EQ(base::Time(), iter->status_change_timestamp);
321 396
322 EXPECT_TRUE(!gcm_driver().last_message_id().empty()); 397 EXPECT_TRUE(!gcm_driver().last_message_id().empty());
323 } 398 }
324 399
325 // Tests the part where GCM message is successfully queued. 400 // Tests the part where GCM message is successfully queued.
326 TEST_F(GCMAccountMapperTest, AddMappingMessageQueued) { 401 TEST_F(GCMAccountMapperTest, AddMappingMessageQueued) {
327 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 402 mapper()->Initialize(GCMAccountMapper::AccountMappings());
403 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
328 404
329 std::vector<GCMClient::AccountTokenInfo> account_tokens; 405 std::vector<GCMClient::AccountTokenInfo> account_tokens;
330 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 406 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
331 account_tokens.push_back(account_token); 407 account_tokens.push_back(account_token);
332 mapper()->SetAccountTokens(account_tokens); 408 mapper()->SetAccountTokens(account_tokens);
333 409
334 clock()->SetNow(base::Time::Now()); 410 clock()->SetNow(base::Time::Now());
335 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 411 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
336 412
337 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email); 413 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email);
(...skipping 12 matching lines...) Expand all
350 EXPECT_EQ(account_token.email, iter->email); 426 EXPECT_EQ(account_token.email, iter->email);
351 EXPECT_EQ(account_token.account_id, iter->account_id); 427 EXPECT_EQ(account_token.account_id, iter->account_id);
352 EXPECT_EQ(account_token.access_token, iter->access_token); 428 EXPECT_EQ(account_token.access_token, iter->access_token);
353 EXPECT_EQ(AccountMapping::ADDING, iter->status); 429 EXPECT_EQ(AccountMapping::ADDING, iter->status);
354 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 430 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
355 EXPECT_EQ(gcm_driver().last_message_id(), iter->last_message_id); 431 EXPECT_EQ(gcm_driver().last_message_id(), iter->last_message_id);
356 } 432 }
357 433
358 // Tests status change from ADDING to MAPPED (Message is acknowledged). 434 // Tests status change from ADDING to MAPPED (Message is acknowledged).
359 TEST_F(GCMAccountMapperTest, AddMappingMessageAcknowledged) { 435 TEST_F(GCMAccountMapperTest, AddMappingMessageAcknowledged) {
360 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 436 mapper()->Initialize(GCMAccountMapper::AccountMappings());
437 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
361 438
362 std::vector<GCMClient::AccountTokenInfo> account_tokens; 439 std::vector<GCMClient::AccountTokenInfo> account_tokens;
363 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 440 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
364 account_tokens.push_back(account_token); 441 account_tokens.push_back(account_token);
365 mapper()->SetAccountTokens(account_tokens); 442 mapper()->SetAccountTokens(account_tokens);
366 443
367 clock()->SetNow(base::Time::Now()); 444 clock()->SetNow(base::Time::Now());
368 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 445 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
369 clock()->SetNow(base::Time::Now()); 446 clock()->SetNow(base::Time::Now());
370 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 447 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id());
(...skipping 14 matching lines...) Expand all
385 EXPECT_EQ(account_token.account_id, iter->account_id); 462 EXPECT_EQ(account_token.account_id, iter->account_id);
386 EXPECT_EQ(account_token.access_token, iter->access_token); 463 EXPECT_EQ(account_token.access_token, iter->access_token);
387 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 464 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
388 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 465 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
389 EXPECT_TRUE(iter->last_message_id.empty()); 466 EXPECT_TRUE(iter->last_message_id.empty());
390 } 467 }
391 468
392 // Tests status change form ADDING to MAPPED (When message was acknowledged, 469 // Tests status change form ADDING to MAPPED (When message was acknowledged,
393 // after Chrome was restarted). 470 // after Chrome was restarted).
394 TEST_F(GCMAccountMapperTest, AddMappingMessageAckedAfterRestart) { 471 TEST_F(GCMAccountMapperTest, AddMappingMessageAckedAfterRestart) {
395 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 472 mapper()->Initialize(GCMAccountMapper::AccountMappings());
473 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
396 474
397 std::vector<GCMClient::AccountTokenInfo> account_tokens; 475 std::vector<GCMClient::AccountTokenInfo> account_tokens;
398 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 476 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
399 account_tokens.push_back(account_token); 477 account_tokens.push_back(account_token);
400 mapper()->SetAccountTokens(account_tokens); 478 mapper()->SetAccountTokens(account_tokens);
401 479
402 clock()->SetNow(base::Time::Now()); 480 clock()->SetNow(base::Time::Now());
403 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 481 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
404 482
405 Restart(); 483 Restart();
406 GCMAccountMapper::AccountMappings stored_mappings; 484 GCMAccountMapper::AccountMappings stored_mappings;
407 stored_mappings.push_back(gcm_driver().last_account_mapping()); 485 stored_mappings.push_back(gcm_driver().last_account_mapping());
408 mapper()->Initialize(stored_mappings, kRegistrationId); 486 mapper()->Initialize(stored_mappings);
409 487
410 clock()->SetNow(base::Time::Now()); 488 clock()->SetNow(base::Time::Now());
411 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 489 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id());
412 490
413 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email); 491 EXPECT_EQ(account_token.email, gcm_driver().last_account_mapping().email);
414 EXPECT_EQ(account_token.account_id, 492 EXPECT_EQ(account_token.account_id,
415 gcm_driver().last_account_mapping().account_id); 493 gcm_driver().last_account_mapping().account_id);
416 EXPECT_EQ(account_token.access_token, 494 EXPECT_EQ(account_token.access_token,
417 gcm_driver().last_account_mapping().access_token); 495 gcm_driver().last_account_mapping().access_token);
418 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status); 496 EXPECT_EQ(AccountMapping::MAPPED, gcm_driver().last_account_mapping().status);
419 EXPECT_EQ(clock()->Now(), 497 EXPECT_EQ(clock()->Now(),
420 gcm_driver().last_account_mapping().status_change_timestamp); 498 gcm_driver().last_account_mapping().status_change_timestamp);
421 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 499 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
422 500
423 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 501 GCMAccountMapper::AccountMappings mappings = GetAccounts();
424 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 502 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
425 EXPECT_EQ(account_token.email, iter->email); 503 EXPECT_EQ(account_token.email, iter->email);
426 EXPECT_EQ(account_token.account_id, iter->account_id); 504 EXPECT_EQ(account_token.account_id, iter->account_id);
427 EXPECT_EQ(account_token.access_token, iter->access_token); 505 EXPECT_EQ(account_token.access_token, iter->access_token);
428 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 506 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
429 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp); 507 EXPECT_EQ(clock()->Now(), iter->status_change_timestamp);
430 EXPECT_TRUE(iter->last_message_id.empty()); 508 EXPECT_TRUE(iter->last_message_id.empty());
431 } 509 }
432 510
433 // Tests a case when ADD message times out for a new account. 511 // Tests a case when ADD message times out for a new account.
434 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForNewAccount) { 512 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForNewAccount) {
435 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 513 mapper()->Initialize(GCMAccountMapper::AccountMappings());
514 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
436 515
437 std::vector<GCMClient::AccountTokenInfo> account_tokens; 516 std::vector<GCMClient::AccountTokenInfo> account_tokens;
438 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 517 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
439 account_tokens.push_back(account_token); 518 account_tokens.push_back(account_token);
440 mapper()->SetAccountTokens(account_tokens); 519 mapper()->SetAccountTokens(account_tokens);
441 520
442 clock()->SetNow(base::Time::Now()); 521 clock()->SetNow(base::Time::Now());
443 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 522 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
444 523
445 clock()->SetNow(base::Time::Now()); 524 clock()->SetNow(base::Time::Now());
(...skipping 11 matching lines...) Expand all
457 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForMappedAccount) { 536 TEST_F(GCMAccountMapperTest, AddMappingMessageSendErrorForMappedAccount) {
458 // Start with one account that is mapped. 537 // Start with one account that is mapped.
459 base::Time status_change_timestamp = base::Time::Now(); 538 base::Time status_change_timestamp = base::Time::Now();
460 AccountMapping mapping = MakeAccountMapping("acc_id", 539 AccountMapping mapping = MakeAccountMapping("acc_id",
461 AccountMapping::MAPPED, 540 AccountMapping::MAPPED,
462 status_change_timestamp, 541 status_change_timestamp,
463 "add_message_id"); 542 "add_message_id");
464 543
465 GCMAccountMapper::AccountMappings stored_mappings; 544 GCMAccountMapper::AccountMappings stored_mappings;
466 stored_mappings.push_back(mapping); 545 stored_mappings.push_back(mapping);
467 mapper()->Initialize(stored_mappings, kRegistrationId); 546 mapper()->Initialize(stored_mappings);
547 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
468 548
469 clock()->SetNow(base::Time::Now()); 549 clock()->SetNow(base::Time::Now());
470 gcm_driver().MessageSendError("add_message_id"); 550 gcm_driver().MessageSendError("add_message_id");
471 551
472 // No new message is sent because of the send error, as the token is stale. 552 // No new message is sent because of the send error, as the token is stale.
473 // Because the account was new, the entry should be deleted. 553 // Because the account was new, the entry should be deleted.
474 EXPECT_TRUE(gcm_driver().last_message_id().empty()); 554 EXPECT_TRUE(gcm_driver().last_message_id().empty());
475 555
476 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 556 GCMAccountMapper::AccountMappings mappings = GetAccounts();
477 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 557 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
478 EXPECT_EQ(mapping.email, iter->email); 558 EXPECT_EQ(mapping.email, iter->email);
479 EXPECT_EQ(mapping.account_id, iter->account_id); 559 EXPECT_EQ(mapping.account_id, iter->account_id);
480 EXPECT_EQ(mapping.access_token, iter->access_token); 560 EXPECT_EQ(mapping.access_token, iter->access_token);
481 EXPECT_EQ(AccountMapping::MAPPED, iter->status); 561 EXPECT_EQ(AccountMapping::MAPPED, iter->status);
482 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp); 562 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp);
483 EXPECT_TRUE(iter->last_message_id.empty()); 563 EXPECT_TRUE(iter->last_message_id.empty());
484 } 564 }
485 565
486 // Tests that a missing token for an account will trigger removing of that 566 // Tests that a missing token for an account will trigger removing of that
487 // account. This test goes only until the message is passed to GCM. 567 // account. This test goes only until the message is passed to GCM.
488 TEST_F(GCMAccountMapperTest, RemoveMappingToMessageSent) { 568 TEST_F(GCMAccountMapperTest, RemoveMappingToMessageSent) {
489 // Start with one account that is mapped. 569 // Start with one account that is mapped.
490 AccountMapping mapping = MakeAccountMapping("acc_id", 570 AccountMapping mapping = MakeAccountMapping("acc_id",
491 AccountMapping::MAPPED, 571 AccountMapping::MAPPED,
492 base::Time::Now(), 572 base::Time::Now(),
493 std::string()); 573 std::string());
494 574
495 GCMAccountMapper::AccountMappings stored_mappings; 575 GCMAccountMapper::AccountMappings stored_mappings;
496 stored_mappings.push_back(mapping); 576 stored_mappings.push_back(mapping);
497 mapper()->Initialize(stored_mappings, kRegistrationId); 577 mapper()->Initialize(stored_mappings);
578 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
498 clock()->SetNow(base::Time::Now()); 579 clock()->SetNow(base::Time::Now());
499 580
500 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 581 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
501 582
502 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 583 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
503 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 584 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
504 EXPECT_EQ(AccountMapping::REMOVING, 585 EXPECT_EQ(AccountMapping::REMOVING,
505 gcm_driver().last_account_mapping().status); 586 gcm_driver().last_account_mapping().status);
506 EXPECT_EQ(clock()->Now(), 587 EXPECT_EQ(clock()->Now(),
507 gcm_driver().last_account_mapping().status_change_timestamp); 588 gcm_driver().last_account_mapping().status_change_timestamp);
(...skipping 13 matching lines...) Expand all
521 // account. This test goes until the message is queued by GCM. 602 // account. This test goes until the message is queued by GCM.
522 TEST_F(GCMAccountMapperTest, RemoveMappingMessageQueued) { 603 TEST_F(GCMAccountMapperTest, RemoveMappingMessageQueued) {
523 // Start with one account that is mapped. 604 // Start with one account that is mapped.
524 AccountMapping mapping = MakeAccountMapping("acc_id", 605 AccountMapping mapping = MakeAccountMapping("acc_id",
525 AccountMapping::MAPPED, 606 AccountMapping::MAPPED,
526 base::Time::Now(), 607 base::Time::Now(),
527 std::string()); 608 std::string());
528 609
529 GCMAccountMapper::AccountMappings stored_mappings; 610 GCMAccountMapper::AccountMappings stored_mappings;
530 stored_mappings.push_back(mapping); 611 stored_mappings.push_back(mapping);
531 mapper()->Initialize(stored_mappings, kRegistrationId); 612 mapper()->Initialize(stored_mappings);
613 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
532 clock()->SetNow(base::Time::Now()); 614 clock()->SetNow(base::Time::Now());
533 base::Time status_change_timestamp = clock()->Now(); 615 base::Time status_change_timestamp = clock()->Now();
534 616
535 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 617 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
536 clock()->SetNow(base::Time::Now()); 618 clock()->SetNow(base::Time::Now());
537 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 619 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
538 620
539 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 621 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
540 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 622 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
541 EXPECT_EQ(AccountMapping::REMOVING, 623 EXPECT_EQ(AccountMapping::REMOVING,
(...skipping 19 matching lines...) Expand all
561 // account mapping being completely gone. 643 // account mapping being completely gone.
562 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAcknowledged) { 644 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAcknowledged) {
563 // Start with one account that is mapped. 645 // Start with one account that is mapped.
564 AccountMapping mapping = MakeAccountMapping("acc_id", 646 AccountMapping mapping = MakeAccountMapping("acc_id",
565 AccountMapping::MAPPED, 647 AccountMapping::MAPPED,
566 base::Time::Now(), 648 base::Time::Now(),
567 std::string()); 649 std::string());
568 650
569 GCMAccountMapper::AccountMappings stored_mappings; 651 GCMAccountMapper::AccountMappings stored_mappings;
570 stored_mappings.push_back(mapping); 652 stored_mappings.push_back(mapping);
571 mapper()->Initialize(stored_mappings, kRegistrationId); 653 mapper()->Initialize(stored_mappings);
654 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
572 clock()->SetNow(base::Time::Now()); 655 clock()->SetNow(base::Time::Now());
573 656
574 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 657 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
575 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 658 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
576 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id()); 659 gcm_driver().AcknowledgeSend(gcm_driver().last_message_id());
577 660
578 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id()); 661 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id());
579 662
580 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 663 GCMAccountMapper::AccountMappings mappings = GetAccounts();
581 EXPECT_TRUE(mappings.empty()); 664 EXPECT_TRUE(mappings.empty());
582 } 665 }
583 666
584 // Tests that account removing proceeds, when a removing message is acked after 667 // Tests that account removing proceeds, when a removing message is acked after
585 // Chrome was restarted. 668 // Chrome was restarted.
586 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAckedAfterRestart) { 669 TEST_F(GCMAccountMapperTest, RemoveMappingMessageAckedAfterRestart) {
587 // Start with one account that is mapped. 670 // Start with one account that is mapped.
588 AccountMapping mapping = MakeAccountMapping("acc_id", 671 AccountMapping mapping = MakeAccountMapping("acc_id",
589 AccountMapping::REMOVING, 672 AccountMapping::REMOVING,
590 base::Time::Now(), 673 base::Time::Now(),
591 "remove_message_id"); 674 "remove_message_id");
592 675
593 GCMAccountMapper::AccountMappings stored_mappings; 676 GCMAccountMapper::AccountMappings stored_mappings;
594 stored_mappings.push_back(mapping); 677 stored_mappings.push_back(mapping);
595 mapper()->Initialize(stored_mappings, kRegistrationId); 678 mapper()->Initialize(stored_mappings);
596 679
597 gcm_driver().AcknowledgeSend("remove_message_id"); 680 gcm_driver().AcknowledgeSend("remove_message_id");
598 681
599 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id()); 682 EXPECT_EQ(mapping.account_id, gcm_driver().last_removed_account_id());
600 683
601 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 684 GCMAccountMapper::AccountMappings mappings = GetAccounts();
602 EXPECT_TRUE(mappings.empty()); 685 EXPECT_TRUE(mappings.empty());
603 } 686 }
604 687
605 // Tests that account removing proceeds, when a removing message is acked after 688 // Tests that account removing proceeds, when a removing message is acked after
606 // Chrome was restarted. 689 // Chrome was restarted.
607 TEST_F(GCMAccountMapperTest, RemoveMappingMessageSendError) { 690 TEST_F(GCMAccountMapperTest, RemoveMappingMessageSendError) {
608 // Start with one account that is mapped. 691 // Start with one account that is mapped.
609 base::Time status_change_timestamp = base::Time::Now(); 692 base::Time status_change_timestamp = base::Time::Now();
610 AccountMapping mapping = MakeAccountMapping("acc_id", 693 AccountMapping mapping = MakeAccountMapping("acc_id",
611 AccountMapping::REMOVING, 694 AccountMapping::REMOVING,
612 status_change_timestamp, 695 status_change_timestamp,
613 "remove_message_id"); 696 "remove_message_id");
614 697
615 GCMAccountMapper::AccountMappings stored_mappings; 698 GCMAccountMapper::AccountMappings stored_mappings;
616 stored_mappings.push_back(mapping); 699 stored_mappings.push_back(mapping);
617 mapper()->Initialize(stored_mappings, kRegistrationId); 700 mapper()->Initialize(stored_mappings);
618 701
619 clock()->SetNow(base::Time::Now()); 702 clock()->SetNow(base::Time::Now());
620 gcm_driver().MessageSendError("remove_message_id"); 703 gcm_driver().MessageSendError("remove_message_id");
621 704
622 EXPECT_TRUE(gcm_driver().last_removed_account_id().empty()); 705 EXPECT_TRUE(gcm_driver().last_removed_account_id().empty());
623 706
624 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id); 707 EXPECT_EQ(mapping.account_id, gcm_driver().last_account_mapping().account_id);
625 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email); 708 EXPECT_EQ(mapping.email, gcm_driver().last_account_mapping().email);
626 EXPECT_EQ(AccountMapping::REMOVING, 709 EXPECT_EQ(AccountMapping::REMOVING,
627 gcm_driver().last_account_mapping().status); 710 gcm_driver().last_account_mapping().status);
628 EXPECT_EQ(status_change_timestamp, 711 EXPECT_EQ(status_change_timestamp,
629 gcm_driver().last_account_mapping().status_change_timestamp); 712 gcm_driver().last_account_mapping().status_change_timestamp);
630 // Message is not persisted, until send is completed. 713 // Message is not persisted, until send is completed.
631 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty()); 714 EXPECT_TRUE(gcm_driver().last_account_mapping().last_message_id.empty());
632 715
633 GCMAccountMapper::AccountMappings mappings = GetAccounts(); 716 GCMAccountMapper::AccountMappings mappings = GetAccounts();
634 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin(); 717 GCMAccountMapper::AccountMappings::const_iterator iter = mappings.begin();
635 EXPECT_EQ(mapping.email, iter->email); 718 EXPECT_EQ(mapping.email, iter->email);
636 EXPECT_EQ(mapping.account_id, iter->account_id); 719 EXPECT_EQ(mapping.account_id, iter->account_id);
637 EXPECT_TRUE(iter->access_token.empty()); 720 EXPECT_TRUE(iter->access_token.empty());
638 EXPECT_EQ(AccountMapping::REMOVING, iter->status); 721 EXPECT_EQ(AccountMapping::REMOVING, iter->status);
639 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp); 722 EXPECT_EQ(status_change_timestamp, iter->status_change_timestamp);
640 EXPECT_TRUE(iter->last_message_id.empty()); 723 EXPECT_TRUE(iter->last_message_id.empty());
641 } 724 }
642 725
643 // Tests that, if a new token arrives when the adding message is in progress 726 // Tests that, if a new token arrives when the adding message is in progress
644 // no new message is sent and account mapper still waits for the first one to 727 // no new message is sent and account mapper still waits for the first one to
645 // complete. 728 // complete.
646 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenAdding) { 729 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenAdding) {
647 mapper()->Initialize(GCMAccountMapper::AccountMappings(), kRegistrationId); 730 mapper()->Initialize(GCMAccountMapper::AccountMappings());
731 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
648 732
649 clock()->SetNow(base::Time::Now()); 733 clock()->SetNow(base::Time::Now());
650 std::vector<GCMClient::AccountTokenInfo> account_tokens; 734 std::vector<GCMClient::AccountTokenInfo> account_tokens;
651 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id"); 735 GCMClient::AccountTokenInfo account_token = MakeAccountTokenInfo("acc_id");
652 account_tokens.push_back(account_token); 736 account_tokens.push_back(account_token);
653 mapper()->SetAccountTokens(account_tokens); 737 mapper()->SetAccountTokens(account_tokens);
654 DCHECK_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action()); 738 DCHECK_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action());
655 739
656 clock()->SetNow(base::Time::Now()); 740 clock()->SetNow(base::Time::Now());
657 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 741 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
658 DCHECK_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action()); 742 DCHECK_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action());
659 743
660 // Providing another token and clearing status. 744 // Providing another token and clearing status.
661 gcm_driver().Clear(); 745 gcm_driver().Clear();
662 mapper()->SetAccountTokens(account_tokens); 746 mapper()->SetAccountTokens(account_tokens);
663 DCHECK_EQ(CustomFakeGCMDriver::NONE, gcm_driver().last_action()); 747 DCHECK_EQ(CustomFakeGCMDriver::NONE, gcm_driver().last_action());
664 } 748 }
665 749
666 // Tests that, if a new token arrives when a removing message is in progress 750 // Tests that, if a new token arrives when a removing message is in progress
667 // a new adding message is sent and while account mapping status is changed to 751 // a new adding message is sent and while account mapping status is changed to
668 // mapped. If the original Removing message arrives it is discarded. 752 // mapped. If the original Removing message arrives it is discarded.
669 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenRemoving) { 753 TEST_F(GCMAccountMapperTest, TokenIsRefreshedWhenRemoving) {
670 // Start with one account that is mapped. 754 // Start with one account that is mapped.
671 AccountMapping mapping = MakeAccountMapping( 755 AccountMapping mapping = MakeAccountMapping(
672 "acc_id", AccountMapping::MAPPED, base::Time::Now(), std::string()); 756 "acc_id", AccountMapping::MAPPED, base::Time::Now(), std::string());
673 757
674 GCMAccountMapper::AccountMappings stored_mappings; 758 GCMAccountMapper::AccountMappings stored_mappings;
675 stored_mappings.push_back(mapping); 759 stored_mappings.push_back(mapping);
676 mapper()->Initialize(stored_mappings, kRegistrationId); 760 mapper()->Initialize(stored_mappings);
761 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
677 clock()->SetNow(base::Time::Now()); 762 clock()->SetNow(base::Time::Now());
678 763
679 // Remove the token to trigger a remove message to be sent 764 // Remove the token to trigger a remove message to be sent
680 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>()); 765 mapper()->SetAccountTokens(std::vector<GCMClient::AccountTokenInfo>());
681 EXPECT_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action()); 766 EXPECT_EQ(CustomFakeGCMDriver::SEND_STARTED, gcm_driver().last_action());
682 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS); 767 gcm_driver().CompleteSend(gcm_driver().last_message_id(), GCMClient::SUCCESS);
683 EXPECT_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action()); 768 EXPECT_EQ(CustomFakeGCMDriver::SEND_FINISHED, gcm_driver().last_action());
684 769
685 std::string remove_message_id = gcm_driver().last_message_id(); 770 std::string remove_message_id = gcm_driver().last_message_id();
686 gcm_driver().Clear(); 771 gcm_driver().Clear();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 clock()->SetNow(base::Time::Now()); 804 clock()->SetNow(base::Time::Now());
720 base::Time half_hour_ago = clock()->Now() - base::TimeDelta::FromMinutes(30); 805 base::Time half_hour_ago = clock()->Now() - base::TimeDelta::FromMinutes(30);
721 GCMAccountMapper::AccountMappings stored_mappings; 806 GCMAccountMapper::AccountMappings stored_mappings;
722 stored_mappings.push_back(MakeAccountMapping( 807 stored_mappings.push_back(MakeAccountMapping(
723 "acc_id_0", AccountMapping::ADDING, half_hour_ago, "acc_id_0_msg")); 808 "acc_id_0", AccountMapping::ADDING, half_hour_ago, "acc_id_0_msg"));
724 stored_mappings.push_back(MakeAccountMapping( 809 stored_mappings.push_back(MakeAccountMapping(
725 "acc_id_1", AccountMapping::MAPPED, half_hour_ago, "acc_id_1_msg")); 810 "acc_id_1", AccountMapping::MAPPED, half_hour_ago, "acc_id_1_msg"));
726 stored_mappings.push_back(MakeAccountMapping( 811 stored_mappings.push_back(MakeAccountMapping(
727 "acc_id_2", AccountMapping::REMOVING, half_hour_ago, "acc_id_2_msg")); 812 "acc_id_2", AccountMapping::REMOVING, half_hour_ago, "acc_id_2_msg"));
728 813
729 mapper()->Initialize(stored_mappings, kRegistrationId); 814 mapper()->Initialize(stored_mappings);
815 gcm_driver().CompleteRegister(kRegistrationId, GCMClient::SUCCESS);
730 816
731 GCMAccountMapper::AccountMappings expected_mappings(stored_mappings); 817 GCMAccountMapper::AccountMappings expected_mappings(stored_mappings);
732 818
733 // Finish messages after a restart. 819 // Finish messages after a restart.
734 clock()->SetNow(base::Time::Now()); 820 clock()->SetNow(base::Time::Now());
735 gcm_driver().AcknowledgeSend(expected_mappings[0].last_message_id); 821 gcm_driver().AcknowledgeSend(expected_mappings[0].last_message_id);
736 expected_mappings[0].status_change_timestamp = clock()->Now(); 822 expected_mappings[0].status_change_timestamp = clock()->Now();
737 expected_mappings[0].status = AccountMapping::MAPPED; 823 expected_mappings[0].status = AccountMapping::MAPPED;
738 expected_mappings[0].last_message_id.clear(); 824 expected_mappings[0].last_message_id.clear();
739 825
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 expected_mappings[1].status_change_timestamp = clock()->Now(); 897 expected_mappings[1].status_change_timestamp = clock()->Now();
812 expected_mappings[1].status = AccountMapping::MAPPED; 898 expected_mappings[1].status = AccountMapping::MAPPED;
813 expected_mappings[2].status_change_timestamp = clock()->Now(); 899 expected_mappings[2].status_change_timestamp = clock()->Now();
814 expected_mappings[2].status = AccountMapping::MAPPED; 900 expected_mappings[2].status = AccountMapping::MAPPED;
815 901
816 VerifyMappings( 902 VerifyMappings(
817 expected_mappings, GetAccounts(), "Step 6, Three mapped accounts"); 903 expected_mappings, GetAccounts(), "Step 6, Three mapped accounts");
818 } 904 }
819 905
820 } // namespace gcm 906 } // namespace gcm
OLDNEW
« no previous file with comments | « components/gcm_driver/gcm_account_mapper.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698