Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / google_apis / gcm / engine / gcm_store_impl_unittest.cc
index 8db28cc..bbe408f 100644 (file)
@@ -45,8 +45,6 @@ class GCMStoreImplTest : public testing::Test {
   GCMStoreImplTest();
   virtual ~GCMStoreImplTest();
 
-  virtual void SetUp() OVERRIDE;
-
   scoped_ptr<GCMStore> BuildGCMStore();
 
   std::string GetNextPersistentId();
@@ -74,10 +72,6 @@ GCMStoreImplTest::GCMStoreImplTest()
 
 GCMStoreImplTest::~GCMStoreImplTest() {}
 
-void GCMStoreImplTest::SetUp() {
-  testing::Test::SetUp();
-}
-
 scoped_ptr<GCMStore> GCMStoreImplTest::BuildGCMStore() {
   return scoped_ptr<GCMStore>(new GCMStoreImpl(
       temp_directory_.path(),
@@ -142,7 +136,7 @@ TEST_F(GCMStoreImplTest, DeviceCredentials) {
   ASSERT_EQ(kDeviceToken, load_result->device_security_token);
 }
 
-TEST_F(GCMStoreImplTest, LastCheckinTime) {
+TEST_F(GCMStoreImplTest, LastCheckinInfo) {
   scoped_ptr<GCMStore> gcm_store(BuildGCMStore());
   scoped_ptr<GCMStore::LoadResult> load_result;
   gcm_store->Load(base::Bind(
@@ -150,9 +144,13 @@ TEST_F(GCMStoreImplTest, LastCheckinTime) {
   PumpLoop();
 
   base::Time last_checkin_time = base::Time::Now();
+  std::set<std::string> accounts;
+  accounts.insert("test_user1@gmail.com");
+  accounts.insert("test_user2@gmail.com");
 
-  gcm_store->SetLastCheckinTime(
+  gcm_store->SetLastCheckinInfo(
       last_checkin_time,
+      accounts,
       base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this)));
   PumpLoop();
 
@@ -161,6 +159,7 @@ TEST_F(GCMStoreImplTest, LastCheckinTime) {
       &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result));
   PumpLoop();
   ASSERT_EQ(last_checkin_time, load_result->last_checkin_time);
+  ASSERT_EQ(accounts, load_result->last_checkin_accounts);
 }
 
 TEST_F(GCMStoreImplTest, GServicesSettings_ProtocolV2) {
@@ -520,6 +519,92 @@ TEST_F(GCMStoreImplTest, PerAppMessageLimits) {
   }
 }
 
+TEST_F(GCMStoreImplTest, AccountMapping) {
+  scoped_ptr<GCMStore> gcm_store(BuildGCMStore());
+  scoped_ptr<GCMStore::LoadResult> load_result;
+  gcm_store->Load(base::Bind(
+      &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result));
+
+  // Add account mappings.
+  AccountMapping account_mapping1;
+  account_mapping1.account_id = "account_id_1";
+  account_mapping1.email = "account_id_1@gmail.com";
+  account_mapping1.access_token = "account_token1";
+  account_mapping1.status = AccountMapping::ADDING;
+  account_mapping1.status_change_timestamp = base::Time();
+  account_mapping1.last_message_type = AccountMapping::MSG_ADD;
+  account_mapping1.last_message_id = "message_1";
+
+  AccountMapping account_mapping2;
+  account_mapping2.account_id = "account_id_2";
+  account_mapping2.email = "account_id_2@gmail.com";
+  account_mapping2.access_token = "account_token1";
+  account_mapping2.status = AccountMapping::REMOVING;
+  account_mapping2.status_change_timestamp =
+      base::Time::FromInternalValue(1305734521259935LL);
+  account_mapping2.last_message_type = AccountMapping::MSG_REMOVE;
+  account_mapping2.last_message_id = "message_2";
+
+  gcm_store->AddAccountMapping(
+      account_mapping1,
+      base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this)));
+  PumpLoop();
+  gcm_store->AddAccountMapping(
+      account_mapping2,
+      base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this)));
+  PumpLoop();
+
+  gcm_store = BuildGCMStore().Pass();
+  gcm_store->Load(base::Bind(
+      &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result));
+  PumpLoop();
+
+  EXPECT_EQ(2UL, load_result->account_mappings.size());
+  GCMStore::AccountMappingMap::iterator iter =
+      load_result->account_mappings.begin();
+  EXPECT_EQ("account_id_1", iter->first);
+  EXPECT_EQ(account_mapping1.account_id, iter->second.account_id);
+  EXPECT_EQ(account_mapping1.email, iter->second.email);
+  EXPECT_TRUE(iter->second.access_token.empty());
+  EXPECT_EQ(AccountMapping::ADDING, iter->second.status);
+  EXPECT_EQ(account_mapping1.status_change_timestamp,
+            iter->second.status_change_timestamp);
+  EXPECT_EQ(account_mapping1.last_message_type, iter->second.last_message_type);
+  EXPECT_EQ(account_mapping1.last_message_id, iter->second.last_message_id);
+  ++iter;
+  EXPECT_EQ("account_id_2", iter->first);
+  EXPECT_EQ(account_mapping2.account_id, iter->second.account_id);
+  EXPECT_EQ(account_mapping2.email, iter->second.email);
+  EXPECT_TRUE(iter->second.access_token.empty());
+  EXPECT_EQ(AccountMapping::REMOVING, iter->second.status);
+  EXPECT_EQ(account_mapping2.status_change_timestamp,
+            iter->second.status_change_timestamp);
+  EXPECT_EQ(account_mapping2.last_message_type, iter->second.last_message_type);
+  EXPECT_EQ(account_mapping2.last_message_id, iter->second.last_message_id);
+
+  gcm_store->RemoveAccountMapping(
+      account_mapping1.account_id,
+      base::Bind(&GCMStoreImplTest::UpdateCallback, base::Unretained(this)));
+  PumpLoop();
+
+  gcm_store = BuildGCMStore().Pass();
+  gcm_store->Load(base::Bind(
+      &GCMStoreImplTest::LoadCallback, base::Unretained(this), &load_result));
+  PumpLoop();
+
+  EXPECT_EQ(1UL, load_result->account_mappings.size());
+  iter = load_result->account_mappings.begin();
+  EXPECT_EQ("account_id_2", iter->first);
+  EXPECT_EQ(account_mapping2.account_id, iter->second.account_id);
+  EXPECT_EQ(account_mapping2.email, iter->second.email);
+  EXPECT_TRUE(iter->second.access_token.empty());
+  EXPECT_EQ(AccountMapping::REMOVING, iter->second.status);
+  EXPECT_EQ(account_mapping2.status_change_timestamp,
+            iter->second.status_change_timestamp);
+  EXPECT_EQ(account_mapping2.last_message_type, iter->second.last_message_type);
+  EXPECT_EQ(account_mapping2.last_message_id, iter->second.last_message_id);
+}
+
 // When the database is destroyed, all database updates should fail. At the
 // same time, they per-app message counts should not go up, as failures should
 // result in decrementing the counts.