Index: chrome/browser/chromeos/drive/change_list_loader_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc |
index d6e1c32b75555f6616ef388880c5973ae8852db9..ea639b8bc612b2aa1fe33a333885c7cda61f7ae6 100644 |
--- a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc |
+++ b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc |
@@ -143,6 +143,70 @@ class ChangeListLoaderTest : public testing::Test { |
scoped_ptr<ChangeListLoader> change_list_loader_; |
}; |
+TEST_F(ChangeListLoaderTest, AboutResourceLoader) { |
+ google_apis::GDataErrorCode error[6] = {}; |
+ scoped_ptr<google_apis::AboutResource> about[6]; |
+ |
+ // No resource is cached at the beginning. |
+ ASSERT_FALSE(about_resource_loader_->cached_about_resource()); |
+ |
+ // Since no resource is cached, this "Get" should trigger the update. |
+ about_resource_loader_->GetAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 0, about + 0)); |
+ // Since there is one in-flight update, the next "Get" just wait for it. |
+ about_resource_loader_->GetAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 1, about + 1)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(google_apis::HTTP_SUCCESS, error[0]); |
+ EXPECT_EQ(google_apis::HTTP_SUCCESS, error[1]); |
+ const int64 first_changestamp = about[0]->largest_change_id(); |
+ EXPECT_EQ(first_changestamp, about[1]->largest_change_id()); |
+ ASSERT_TRUE(about_resource_loader_->cached_about_resource()); |
+ EXPECT_EQ( |
+ first_changestamp, |
+ about_resource_loader_->cached_about_resource()->largest_change_id()); |
+ |
+ // Increment changestamp by 1. |
+ AddNewFile("temp"); |
+ // Explicitly calling UpdateAboutResource will start another API call. |
+ about_resource_loader_->UpdateAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 2, about + 2)); |
+ // It again waits for the in-flight UpdateAboutResoure call, even though this |
+ // time there is a cached result. |
+ about_resource_loader_->GetAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 3, about + 3)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(google_apis::HTTP_SUCCESS, error[2]); |
+ EXPECT_EQ(google_apis::HTTP_SUCCESS, error[3]); |
+ EXPECT_EQ(first_changestamp + 1, about[2]->largest_change_id()); |
+ EXPECT_EQ(first_changestamp + 1, about[3]->largest_change_id()); |
+ EXPECT_EQ( |
+ first_changestamp + 1, |
+ about_resource_loader_->cached_about_resource()->largest_change_id()); |
+ |
+ // Increment changestamp by 1. |
+ AddNewFile("temp2"); |
+ // Now no UpdateAboutResource task is running. Returns the cached result. |
+ about_resource_loader_->GetAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 4, about + 4)); |
+ // Explicitly calling UpdateAboutResource will start another API call. |
+ about_resource_loader_->UpdateAboutResource( |
+ google_apis::test_util::CreateCopyResultCallback(error + 5, about + 5)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(google_apis::HTTP_NO_CONTENT, error[4]); |
+ EXPECT_EQ(google_apis::HTTP_SUCCESS, error[5]); |
+ EXPECT_EQ(first_changestamp + 1, about[4]->largest_change_id()); |
+ EXPECT_EQ(first_changestamp + 2, about[5]->largest_change_id()); |
+ EXPECT_EQ( |
+ first_changestamp + 2, |
+ about_resource_loader_->cached_about_resource()->largest_change_id()); |
+ |
+ EXPECT_EQ(3, drive_service_->about_resource_load_count()); |
+} |
+ |
TEST_F(ChangeListLoaderTest, Load) { |
EXPECT_FALSE(change_list_loader_->IsRefreshing()); |