Index: components/gcm_driver/gcm_client_impl_unittest.cc |
diff --git a/components/gcm_driver/gcm_client_impl_unittest.cc b/components/gcm_driver/gcm_client_impl_unittest.cc |
index be241776c0e7b93662cf1a220a5f518e656ea1ab..6cbbd7d4e6e8449c551768f97b73e3a781500ff9 100644 |
--- a/components/gcm_driver/gcm_client_impl_unittest.cc |
+++ b/components/gcm_driver/gcm_client_impl_unittest.cc |
@@ -262,6 +262,10 @@ class GCMClientImplTest : public testing::Test, |
return gcm_client_->connection_factory_.get(); |
} |
+ const GCMClientImpl::CheckinInfo& device_checkin_info() const { |
+ return gcm_client_->device_checkin_info_; |
+ } |
+ |
void reset_last_event() { |
last_event_ = NONE; |
last_app_id_.clear(); |
@@ -519,6 +523,13 @@ TEST_F(GCMClientImplTest, LoadingCompleted) { |
EXPECT_EQ(LOADING_COMPLETED, last_event()); |
EXPECT_EQ(kDeviceAndroidId, mcs_client()->last_android_id()); |
EXPECT_EQ(kDeviceSecurityToken, mcs_client()->last_security_token()); |
+ |
+ // Checking freshly loaded CheckinInfo. |
+ EXPECT_EQ(kDeviceAndroidId, device_checkin_info().android_id); |
+ EXPECT_EQ(kDeviceSecurityToken, device_checkin_info().secret); |
+ EXPECT_EQ(0UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_TRUE(device_checkin_info().account_tokens.empty()); |
} |
TEST_F(GCMClientImplTest, CheckOut) { |
@@ -748,6 +759,7 @@ TEST_F(GCMClientImplCheckinTest, PeriodicCheckin) { |
kDeviceSecurityToken, |
GServicesSettings::CalculateDigest(settings), |
settings); |
+ |
EXPECT_EQ(2, clock()->call_count()); |
PumpLoopUntilIdle(); |
@@ -785,6 +797,117 @@ TEST_F(GCMClientImplCheckinTest, LoadGSettingsFromStore) { |
gservices_settings().GetMCSFallbackEndpoint()); |
} |
+// This test only checks that periodic checkin happens. |
+TEST_F(GCMClientImplCheckinTest, CheckinWithAccounts) { |
+ std::map<std::string, std::string> settings; |
+ settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
+ settings["checkin_url"] = "http://alternative.url/checkin"; |
+ settings["gcm_hostname"] = "alternative.gcm.host"; |
+ settings["gcm_secure_port"] = "7777"; |
+ settings["gcm_registration_url"] = "http://alternative.url/registration"; |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ std::map<std::string, std::string> account_tokens; |
+ account_tokens["test_user1@gmail.com"] = "token1"; |
+ account_tokens["test_user2@gmail.com"] = "token2"; |
+ gcm_client()->SetAccountsForCheckin(account_tokens, false); |
+ |
+ EXPECT_EQ(0UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+ |
+ PumpLoopUntilIdle(); |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+} |
+ |
+// This test only checks that periodic checkin happens. |
+TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemoved) { |
+ std::map<std::string, std::string> settings; |
+ settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
+ settings["checkin_url"] = "http://alternative.url/checkin"; |
+ settings["gcm_hostname"] = "alternative.gcm.host"; |
+ settings["gcm_secure_port"] = "7777"; |
+ settings["gcm_registration_url"] = "http://alternative.url/registration"; |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ std::map<std::string, std::string> account_tokens; |
+ account_tokens["test_user1@gmail.com"] = "token1"; |
+ gcm_client()->SetAccountsForCheckin(account_tokens, true); |
+ |
+ EXPECT_EQ(1UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+ |
+ PumpLoopUntilIdle(); |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ EXPECT_EQ(1UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+} |
+ |
+// This test only checks that periodic checkin happens. |
+TEST_F(GCMClientImplCheckinTest, CheckinWhenAccountRemovalImplied) { |
+ std::map<std::string, std::string> settings; |
+ settings["checkin_interval"] = base::IntToString(kSettingsCheckinInterval); |
+ settings["checkin_url"] = "http://alternative.url/checkin"; |
+ settings["gcm_hostname"] = "alternative.gcm.host"; |
+ settings["gcm_secure_port"] = "7777"; |
+ settings["gcm_registration_url"] = "http://alternative.url/registration"; |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ std::map<std::string, std::string> account_tokens; |
+ account_tokens["test_user1@gmail.com"] = "token1"; |
+ account_tokens["test_user2@gmail.com"] = "token2"; |
+ gcm_client()->SetAccountsForCheckin(account_tokens, false); |
+ |
+ PumpLoopUntilIdle(); |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ EXPECT_EQ(2UL, device_checkin_info().last_checkin_accounts_count); |
+ |
+ // This should trigger another checkin, because there is less account tokens, |
+ // than last reported. This could happen on a restart. |
+ account_tokens.erase(account_tokens.find("test_user1@gmail.com")); |
+ gcm_client()->SetAccountsForCheckin(account_tokens, false); |
+ |
+ EXPECT_EQ(1UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+ |
+ PumpLoopUntilIdle(); |
+ CompleteCheckin(kDeviceAndroidId, |
+ kDeviceSecurityToken, |
+ GServicesSettings::CalculateDigest(settings), |
+ settings); |
+ |
+ EXPECT_EQ(1UL, device_checkin_info().last_checkin_accounts_count); |
+ EXPECT_TRUE(device_checkin_info().accounts_set); |
+ EXPECT_EQ(account_tokens, device_checkin_info().account_tokens); |
+} |
+ |
class GCMClientImplStartAndStopTest : public GCMClientImplTest { |
public: |
GCMClientImplStartAndStopTest(); |