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 f9a7b53915643d7b967cb9c82b32b4b6f40b7646..a9a2429a9d5f02b3a91ae5f7beeee61a11ec0a05 100644 |
--- a/components/gcm_driver/gcm_client_impl_unittest.cc |
+++ b/components/gcm_driver/gcm_client_impl_unittest.cc |
@@ -5,6 +5,8 @@ |
#include "components/gcm_driver/gcm_client_impl.h" |
#include "base/command_line.h" |
+#include "base/files/file_path.h" |
+#include "base/files/file_util.h" |
#include "base/files/scoped_temp_dir.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
@@ -44,6 +46,8 @@ enum LastEvent { |
const uint64 kDeviceAndroidId = 54321; |
const uint64 kDeviceSecurityToken = 12345; |
+const uint64 kDeviceAndroidId2 = 11111; |
+const uint64 kDeviceSecurityToken2 = 2222; |
const int64 kSettingsCheckinInterval = 16 * 60 * 60; |
const char kAppId[] = "app_id"; |
const char kSender[] = "project_id"; |
@@ -334,6 +338,10 @@ class GCMClientImplTest : public testing::Test, |
return gcm_client_->gservices_settings_; |
} |
+ const base::FilePath& temp_directory_path() const { |
+ return temp_directory_.path(); |
+ } |
+ |
int64 CurrentTime(); |
// Tooling. |
@@ -603,6 +611,32 @@ TEST_F(GCMClientImplTest, LoadingCompleted) { |
EXPECT_TRUE(device_checkin_info().account_tokens.empty()); |
} |
+TEST_F(GCMClientImplTest, LoadingBusted) { |
+ // Close the GCM store. |
+ gcm_client()->Stop(); |
+ PumpLoopUntilIdle(); |
+ |
+ // Mess up the store. |
+ base::FilePath store_file_path = |
+ temp_directory_path().Append(FILE_PATH_LITERAL("CURRENT")); |
+ ASSERT_TRUE(base::AppendToFile(store_file_path, "A", 1)); |
+ |
+ // Restart GCM client. The store should be reset and the loading should |
+ // complete successfully. |
+ reset_last_event(); |
+ BuildGCMClient(base::TimeDelta()); |
+ InitializeGCMClient(); |
+ StartGCMClient(); |
+ CompleteCheckin(kDeviceAndroidId2, |
+ kDeviceSecurityToken2, |
+ std::string(), |
+ std::map<std::string, std::string>()); |
+ |
+ EXPECT_EQ(LOADING_COMPLETED, last_event()); |
+ EXPECT_EQ(kDeviceAndroidId2, mcs_client()->last_android_id()); |
+ EXPECT_EQ(kDeviceSecurityToken2, mcs_client()->last_security_token()); |
+} |
+ |
TEST_F(GCMClientImplTest, RegisterApp) { |
EXPECT_FALSE(ExistsRegistration(kAppId)); |