Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / drive / file_system / search_operation_unittest.cc
index 79a7296..7969d69 100644 (file)
@@ -4,9 +4,12 @@
 
 #include "chrome/browser/chromeos/drive/file_system/search_operation.h"
 
+#include "base/callback_helpers.h"
+#include "chrome/browser/chromeos/drive/change_list_loader.h"
 #include "chrome/browser/chromeos/drive/file_system/operation_test_base.h"
 #include "chrome/browser/drive/fake_drive_service.h"
-#include "google_apis/drive/gdata_wapi_parser.h"
+#include "content/public/test/test_utils.h"
+#include "google_apis/drive/drive_api_parser.h"
 #include "google_apis/drive/test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -16,7 +19,8 @@ namespace file_system {
 typedef OperationTestBase SearchOperationTest;
 
 TEST_F(SearchOperationTest, ContentSearch) {
-  SearchOperation operation(blocking_task_runner(), scheduler(), metadata());
+  SearchOperation operation(blocking_task_runner(), scheduler(), metadata(),
+                            loader_controller());
 
   std::set<std::string> expected_results;
   expected_results.insert(
@@ -33,7 +37,7 @@ TEST_F(SearchOperationTest, ContentSearch) {
   operation.Search("Directory", GURL(),
                    google_apis::test_util::CreateCopyResultCallback(
                        &error, &next_link, &results));
-  test_util::RunBlockingPoolTask();
+  content::RunAllBlockingPoolTasksUntilIdle();
 
   EXPECT_EQ(FILE_ERROR_OK, error);
   EXPECT_TRUE(next_link.is_empty());
@@ -45,18 +49,19 @@ TEST_F(SearchOperationTest, ContentSearch) {
 }
 
 TEST_F(SearchOperationTest, ContentSearchWithNewEntry) {
-  SearchOperation operation(blocking_task_runner(), scheduler(), metadata());
+  SearchOperation operation(blocking_task_runner(), scheduler(), metadata(),
+                            loader_controller());
 
   // Create a new directory in the drive service.
-  google_apis::GDataErrorCode gdata_error = google_apis::GDATA_OTHER_ERROR;
-  scoped_ptr<google_apis::ResourceEntry> resource_entry;
+  google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR;
+  scoped_ptr<google_apis::FileResource> server_entry;
   fake_service()->AddNewDirectory(
       fake_service()->GetRootResourceId(),
       "New Directory 1!",
-      google_apis::test_util::CreateCopyResultCallback(
-          &gdata_error, &resource_entry));
-  test_util::RunBlockingPoolTask();
-  ASSERT_EQ(google_apis::HTTP_CREATED, gdata_error);
+      DriveServiceInterface::AddNewDirectoryOptions(),
+      google_apis::test_util::CreateCopyResultCallback(&status, &server_entry));
+  content::RunAllBlockingPoolTasksUntilIdle();
+  ASSERT_EQ(google_apis::HTTP_CREATED, status);
 
   // As the result of the first Search(), only entries in the current file
   // system snapshot are expected to be returned in the "right" path. New
@@ -72,7 +77,7 @@ TEST_F(SearchOperationTest, ContentSearchWithNewEntry) {
   operation.Search("\"Directory 1\"", GURL(),
                    google_apis::test_util::CreateCopyResultCallback(
                        &error, &next_link, &results));
-  test_util::RunBlockingPoolTask();
+  content::RunAllBlockingPoolTasksUntilIdle();
 
   EXPECT_EQ(FILE_ERROR_OK, error);
   EXPECT_TRUE(next_link.is_empty());
@@ -93,7 +98,7 @@ TEST_F(SearchOperationTest, ContentSearchWithNewEntry) {
   operation.Search("\"Directory 1\"", GURL(),
                    google_apis::test_util::CreateCopyResultCallback(
                        &error, &next_link, &results));
-  test_util::RunBlockingPoolTask();
+  content::RunAllBlockingPoolTasksUntilIdle();
 
   EXPECT_EQ(FILE_ERROR_OK, error);
   EXPECT_TRUE(next_link.is_empty());
@@ -105,7 +110,8 @@ TEST_F(SearchOperationTest, ContentSearchWithNewEntry) {
 }
 
 TEST_F(SearchOperationTest, ContentSearchEmptyResult) {
-  SearchOperation operation(blocking_task_runner(), scheduler(), metadata());
+  SearchOperation operation(blocking_task_runner(), scheduler(), metadata(),
+                            loader_controller());
 
   FileError error = FILE_ERROR_FAILED;
   GURL next_link;
@@ -114,12 +120,39 @@ TEST_F(SearchOperationTest, ContentSearchEmptyResult) {
   operation.Search("\"no-match query\"", GURL(),
                    google_apis::test_util::CreateCopyResultCallback(
                        &error, &next_link, &results));
-  test_util::RunBlockingPoolTask();
+  content::RunAllBlockingPoolTasksUntilIdle();
 
   EXPECT_EQ(FILE_ERROR_OK, error);
   EXPECT_TRUE(next_link.is_empty());
   EXPECT_EQ(0U, results->size());
 }
 
+TEST_F(SearchOperationTest, Lock) {
+  SearchOperation operation(blocking_task_runner(), scheduler(), metadata(),
+                            loader_controller());
+
+  // Lock.
+  scoped_ptr<base::ScopedClosureRunner> lock = loader_controller()->GetLock();
+
+  // Search does not return the result as long as lock is alive.
+  FileError error = FILE_ERROR_FAILED;
+  GURL next_link;
+  scoped_ptr<std::vector<SearchResultInfo> > results;
+
+  operation.Search("\"Directory 1\"", GURL(),
+                   google_apis::test_util::CreateCopyResultCallback(
+                       &error, &next_link, &results));
+  content::RunAllBlockingPoolTasksUntilIdle();
+  EXPECT_EQ(FILE_ERROR_FAILED, error);
+  EXPECT_FALSE(results);
+
+  // Unlock, this should resume the pending search.
+  lock.reset();
+  content::RunAllBlockingPoolTasksUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+  ASSERT_TRUE(results);
+  EXPECT_EQ(1u, results->size());
+}
+
 }  // namespace file_system
 }  // namespace drive