OLD | NEW |
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 "google_apis/gcm/engine/gcm_store_impl.h" | 5 #include "google_apis/gcm/engine/gcm_store_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 const char kCategoryName[] = "my_category"; | 38 const char kCategoryName[] = "my_category"; |
39 | 39 |
40 const uint64 kDeviceId = 22; | 40 const uint64 kDeviceId = 22; |
41 const uint64 kDeviceToken = 55; | 41 const uint64 kDeviceToken = 55; |
42 | 42 |
43 class GCMStoreImplTest : public testing::Test { | 43 class GCMStoreImplTest : public testing::Test { |
44 public: | 44 public: |
45 GCMStoreImplTest(); | 45 GCMStoreImplTest(); |
46 virtual ~GCMStoreImplTest(); | 46 virtual ~GCMStoreImplTest(); |
47 | 47 |
48 virtual void SetUp() OVERRIDE; | |
49 | |
50 scoped_ptr<GCMStore> BuildGCMStore(); | 48 scoped_ptr<GCMStore> BuildGCMStore(); |
51 | 49 |
52 std::string GetNextPersistentId(); | 50 std::string GetNextPersistentId(); |
53 | 51 |
54 void PumpLoop(); | 52 void PumpLoop(); |
55 | 53 |
56 void LoadCallback(scoped_ptr<GCMStore::LoadResult>* result_dst, | 54 void LoadCallback(scoped_ptr<GCMStore::LoadResult>* result_dst, |
57 scoped_ptr<GCMStore::LoadResult> result); | 55 scoped_ptr<GCMStore::LoadResult> result); |
58 void UpdateCallback(bool success); | 56 void UpdateCallback(bool success); |
59 | 57 |
60 protected: | 58 protected: |
61 base::MessageLoop message_loop_; | 59 base::MessageLoop message_loop_; |
62 base::ScopedTempDir temp_directory_; | 60 base::ScopedTempDir temp_directory_; |
63 bool expected_success_; | 61 bool expected_success_; |
64 uint64 next_persistent_id_; | 62 uint64 next_persistent_id_; |
65 scoped_ptr<base::RunLoop> run_loop_; | 63 scoped_ptr<base::RunLoop> run_loop_; |
66 }; | 64 }; |
67 | 65 |
68 GCMStoreImplTest::GCMStoreImplTest() | 66 GCMStoreImplTest::GCMStoreImplTest() |
69 : expected_success_(true), | 67 : expected_success_(true), |
70 next_persistent_id_(base::Time::Now().ToInternalValue()) { | 68 next_persistent_id_(base::Time::Now().ToInternalValue()) { |
71 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); | 69 EXPECT_TRUE(temp_directory_.CreateUniqueTempDir()); |
72 run_loop_.reset(new base::RunLoop()); | 70 run_loop_.reset(new base::RunLoop()); |
73 } | 71 } |
74 | 72 |
75 GCMStoreImplTest::~GCMStoreImplTest() {} | 73 GCMStoreImplTest::~GCMStoreImplTest() {} |
76 | 74 |
77 void GCMStoreImplTest::SetUp() { | |
78 testing::Test::SetUp(); | |
79 } | |
80 | |
81 scoped_ptr<GCMStore> GCMStoreImplTest::BuildGCMStore() { | 75 scoped_ptr<GCMStore> GCMStoreImplTest::BuildGCMStore() { |
82 return scoped_ptr<GCMStore>(new GCMStoreImpl( | 76 return scoped_ptr<GCMStore>(new GCMStoreImpl( |
83 temp_directory_.path(), | 77 temp_directory_.path(), |
84 message_loop_.message_loop_proxy(), | 78 message_loop_.message_loop_proxy(), |
85 make_scoped_ptr<Encryptor>(new FakeEncryptor))); | 79 make_scoped_ptr<Encryptor>(new FakeEncryptor))); |
86 } | 80 } |
87 | 81 |
88 std::string GCMStoreImplTest::GetNextPersistentId() { | 82 std::string GCMStoreImplTest::GetNextPersistentId() { |
89 return base::Uint64ToString(next_persistent_id_++); | 83 return base::Uint64ToString(next_persistent_id_++); |
90 } | 84 } |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 message.set_category(kCategoryName); | 493 message.set_category(kCategoryName); |
500 EXPECT_TRUE(gcm_store->AddOutgoingMessage( | 494 EXPECT_TRUE(gcm_store->AddOutgoingMessage( |
501 base::IntToString(i + kNumMessagesPerApp), | 495 base::IntToString(i + kNumMessagesPerApp), |
502 MCSMessage(message), | 496 MCSMessage(message), |
503 base::Bind(&GCMStoreImplTest::UpdateCallback, | 497 base::Bind(&GCMStoreImplTest::UpdateCallback, |
504 base::Unretained(this)))); | 498 base::Unretained(this)))); |
505 PumpLoop(); | 499 PumpLoop(); |
506 } | 500 } |
507 } | 501 } |
508 | 502 |
| 503 TEST_F(GCMStoreImplTest, AccountMapping) { |
| 504 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
| 505 scoped_ptr<GCMStore::LoadResult> load_result; |
| 506 gcm_store->Load(base::Bind( |
| 507 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
| 508 |
| 509 // Add account mappings. |
| 510 AccountInfo account_info1; |
| 511 account_info1.account_id = "account_id_1"; |
| 512 account_info1.email = "account_id_1@gmail.com"; |
| 513 account_info1.last_message_type = AccountInfo::MSG_ADD; |
| 514 account_info1.last_message_id = "message_1"; |
| 515 account_info1.last_message_timestamp = |
| 516 base::Time::FromInternalValue(1305797421259935LL); |
| 517 AccountInfo account_info2; |
| 518 account_info2.account_id = "account_id_2"; |
| 519 account_info2.email = "account_id_2@gmail.com"; |
| 520 account_info2.last_message_type = AccountInfo::MSG_REMOVE; |
| 521 account_info2.last_message_id = "message_2"; |
| 522 account_info2.last_message_timestamp = |
| 523 base::Time::FromInternalValue(1305734521259935LL); |
| 524 |
| 525 gcm_store->AddAccountMapping( |
| 526 account_info1, |
| 527 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
| 528 PumpLoop(); |
| 529 gcm_store->AddAccountMapping( |
| 530 account_info2, |
| 531 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
| 532 PumpLoop(); |
| 533 |
| 534 gcm_store = BuildGCMStore().Pass(); |
| 535 gcm_store->Load(base::Bind( |
| 536 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
| 537 PumpLoop(); |
| 538 |
| 539 EXPECT_EQ(2UL, load_result->account_infos.size()); |
| 540 GCMStore::AccountInfoMap::iterator iter = load_result->account_infos.begin(); |
| 541 EXPECT_EQ("account_id_1", iter->first); |
| 542 EXPECT_EQ(account_info1.account_id, iter->second.account_id); |
| 543 EXPECT_EQ(account_info1.email, iter->second.email); |
| 544 EXPECT_EQ(account_info1.last_message_type, iter->second.last_message_type); |
| 545 EXPECT_EQ(account_info1.last_message_id, iter->second.last_message_id); |
| 546 EXPECT_EQ(account_info1.last_message_timestamp, |
| 547 iter->second.last_message_timestamp); |
| 548 ++iter; |
| 549 EXPECT_EQ("account_id_2", iter->first); |
| 550 EXPECT_EQ(account_info2.account_id, iter->second.account_id); |
| 551 EXPECT_EQ(account_info2.email, iter->second.email); |
| 552 EXPECT_EQ(account_info2.last_message_type, iter->second.last_message_type); |
| 553 EXPECT_EQ(account_info2.last_message_id, iter->second.last_message_id); |
| 554 EXPECT_EQ(account_info2.last_message_timestamp, |
| 555 iter->second.last_message_timestamp); |
| 556 |
| 557 gcm_store->RemoveAccountMapping( |
| 558 account_info1.account_id, |
| 559 base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this))); |
| 560 PumpLoop(); |
| 561 |
| 562 gcm_store = BuildGCMStore().Pass(); |
| 563 gcm_store->Load(base::Bind( |
| 564 &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result)); |
| 565 PumpLoop(); |
| 566 |
| 567 EXPECT_EQ(1UL, load_result->account_infos.size()); |
| 568 iter = load_result->account_infos.begin(); |
| 569 EXPECT_EQ("account_id_2", iter->first); |
| 570 EXPECT_EQ(account_info2.account_id, iter->second.account_id); |
| 571 EXPECT_EQ(account_info2.email, iter->second.email); |
| 572 EXPECT_EQ(account_info2.last_message_type, iter->second.last_message_type); |
| 573 EXPECT_EQ(account_info2.last_message_id, iter->second.last_message_id); |
| 574 EXPECT_EQ(account_info2.last_message_timestamp, |
| 575 iter->second.last_message_timestamp); |
| 576 } |
| 577 |
509 // When the database is destroyed, all database updates should fail. At the | 578 // When the database is destroyed, all database updates should fail. At the |
510 // same time, they per-app message counts should not go up, as failures should | 579 // same time, they per-app message counts should not go up, as failures should |
511 // result in decrementing the counts. | 580 // result in decrementing the counts. |
512 TEST_F(GCMStoreImplTest, AddMessageAfterDestroy) { | 581 TEST_F(GCMStoreImplTest, AddMessageAfterDestroy) { |
513 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); | 582 scoped_ptr<GCMStore> gcm_store(BuildGCMStore()); |
514 scoped_ptr<GCMStore::LoadResult> load_result; | 583 scoped_ptr<GCMStore::LoadResult> load_result; |
515 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, | 584 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, |
516 base::Unretained(this), | 585 base::Unretained(this), |
517 &load_result)); | 586 &load_result)); |
518 PumpLoop(); | 587 PumpLoop(); |
(...skipping 29 matching lines...) Expand all Loading... |
548 | 617 |
549 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, | 618 gcm_store->Load(base::Bind(&GCMStoreImplTest::LoadCallback, |
550 base::Unretained(this), | 619 base::Unretained(this), |
551 &load_result)); | 620 &load_result)); |
552 PumpLoop(); | 621 PumpLoop(); |
553 } | 622 } |
554 | 623 |
555 } // namespace | 624 } // namespace |
556 | 625 |
557 } // namespace gcm | 626 } // namespace gcm |
OLD | NEW |