Index: chrome/browser/chromeos/drive/job_scheduler_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/job_scheduler_unittest.cc b/chrome/browser/chromeos/drive/job_scheduler_unittest.cc |
deleted file mode 100644 |
index 4a301e57120cf6232d15079cab36facfc54b1115..0000000000000000000000000000000000000000 |
--- a/chrome/browser/chromeos/drive/job_scheduler_unittest.cc |
+++ /dev/null |
@@ -1,1038 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/chromeos/drive/job_scheduler.h" |
- |
-#include <set> |
- |
-#include "base/bind.h" |
-#include "base/files/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/prefs/testing_pref_service.h" |
-#include "base/run_loop.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/stl_util.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "chrome/browser/chromeos/drive/drive_pref_names.h" |
-#include "chrome/browser/chromeos/drive/test_util.h" |
-#include "components/drive/event_logger.h" |
-#include "components/drive/service/fake_drive_service.h" |
-#include "components/drive/service/test_util.h" |
-#include "content/public/test/test_browser_thread_bundle.h" |
-#include "google_apis/drive/drive_api_parser.h" |
-#include "google_apis/drive/test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace drive { |
- |
-namespace { |
- |
-// Dummy value passed for the |expected_file_size| parameter of DownloadFile(). |
-const int64 kDummyDownloadFileSize = 0; |
- |
-void CopyTitleFromFileResourceCallback( |
- std::vector<std::string>* title_list_out, |
- google_apis::DriveApiErrorCode error_in, |
- scoped_ptr<google_apis::FileResource> entry_in) { |
- title_list_out->push_back(entry_in->title()); |
-} |
- |
-class JobListLogger : public JobListObserver { |
- public: |
- enum EventType { |
- ADDED, |
- UPDATED, |
- DONE, |
- }; |
- |
- struct EventLog { |
- EventType type; |
- JobInfo info; |
- |
- EventLog(EventType type, const JobInfo& info) : type(type), info(info) { |
- } |
- }; |
- |
- // Checks whether the specified type of event has occurred. |
- bool Has(EventType type, JobType job_type) { |
- for (size_t i = 0; i < events.size(); ++i) { |
- if (events[i].type == type && events[i].info.job_type == job_type) |
- return true; |
- } |
- return false; |
- } |
- |
- // Gets the progress event information of the specified type. |
- void GetProgressInfo(JobType job_type, std::vector<int64>* progress) { |
- for (size_t i = 0; i < events.size(); ++i) { |
- if (events[i].type == UPDATED && events[i].info.job_type == job_type) |
- progress->push_back(events[i].info.num_completed_bytes); |
- } |
- } |
- |
- // JobListObserver overrides. |
- void OnJobAdded(const JobInfo& info) override { |
- events.push_back(EventLog(ADDED, info)); |
- } |
- |
- void OnJobUpdated(const JobInfo& info) override { |
- events.push_back(EventLog(UPDATED, info)); |
- } |
- |
- void OnJobDone(const JobInfo& info, FileError error) override { |
- events.push_back(EventLog(DONE, info)); |
- } |
- |
- private: |
- std::vector<EventLog> events; |
-}; |
- |
-// Fake drive service extended for testing cancellation. |
-// When upload_new_file_cancelable is set, this Drive service starts |
-// returning a closure to cancel from InitiateUploadNewFile(). The task will |
-// finish only when the cancel closure is called. |
-class CancelTestableFakeDriveService : public FakeDriveService { |
- public: |
- CancelTestableFakeDriveService() |
- : upload_new_file_cancelable_(false) { |
- } |
- |
- void set_upload_new_file_cancelable(bool cancelable) { |
- upload_new_file_cancelable_ = cancelable; |
- } |
- |
- google_apis::CancelCallback InitiateUploadNewFile( |
- const std::string& content_type, |
- int64 content_length, |
- const std::string& parent_resource_id, |
- const std::string& title, |
- const UploadNewFileOptions& options, |
- const google_apis::InitiateUploadCallback& callback) override { |
- if (upload_new_file_cancelable_) |
- return base::Bind(callback, google_apis::DRIVE_CANCELLED, GURL()); |
- |
- return FakeDriveService::InitiateUploadNewFile(content_type, |
- content_length, |
- parent_resource_id, |
- title, |
- options, |
- callback); |
- } |
- |
- private: |
- bool upload_new_file_cancelable_; |
-}; |
- |
-} // namespace |
- |
-class JobSchedulerTest : public testing::Test { |
- public: |
- JobSchedulerTest() |
- : pref_service_(new TestingPrefServiceSimple) { |
- test_util::RegisterDrivePrefs(pref_service_->registry()); |
- } |
- |
- void SetUp() override { |
- fake_network_change_notifier_.reset( |
- new test_util::FakeNetworkChangeNotifier); |
- |
- logger_.reset(new EventLogger); |
- |
- fake_drive_service_.reset(new CancelTestableFakeDriveService); |
- test_util::SetUpTestEntries(fake_drive_service_.get()); |
- fake_drive_service_->LoadAppListForDriveApi("drive/applist.json"); |
- |
- scheduler_.reset(new JobScheduler( |
- pref_service_.get(), |
- logger_.get(), |
- fake_drive_service_.get(), |
- base::ThreadTaskRunnerHandle::Get().get())); |
- scheduler_->SetDisableThrottling(true); |
- } |
- |
- protected: |
- // Sets up FakeNetworkChangeNotifier as if it's connected to a network with |
- // the specified connection type. |
- void ChangeConnectionType(net::NetworkChangeNotifier::ConnectionType type) { |
- fake_network_change_notifier_->SetConnectionType(type); |
- } |
- |
- // Sets up FakeNetworkChangeNotifier as if it's connected to wifi network. |
- void ConnectToWifi() { |
- ChangeConnectionType(net::NetworkChangeNotifier::CONNECTION_WIFI); |
- } |
- |
- // Sets up FakeNetworkChangeNotifier as if it's connected to cellular network. |
- void ConnectToCellular() { |
- ChangeConnectionType(net::NetworkChangeNotifier::CONNECTION_2G); |
- } |
- |
- // Sets up FakeNetworkChangeNotifier as if it's connected to wimax network. |
- void ConnectToWimax() { |
- ChangeConnectionType(net::NetworkChangeNotifier::CONNECTION_4G); |
- } |
- |
- // Sets up FakeNetworkChangeNotifier as if it's disconnected. |
- void ConnectToNone() { |
- ChangeConnectionType(net::NetworkChangeNotifier::CONNECTION_NONE); |
- } |
- |
- static int GetMetadataQueueMaxJobCount() { |
- return JobScheduler::kMaxJobCount[JobScheduler::METADATA_QUEUE]; |
- } |
- |
- content::TestBrowserThreadBundle thread_bundle_; |
- scoped_ptr<TestingPrefServiceSimple> pref_service_; |
- scoped_ptr<test_util::FakeNetworkChangeNotifier> |
- fake_network_change_notifier_; |
- scoped_ptr<EventLogger> logger_; |
- scoped_ptr<CancelTestableFakeDriveService> fake_drive_service_; |
- scoped_ptr<JobScheduler> scheduler_; |
-}; |
- |
-TEST_F(JobSchedulerTest, GetAboutResource) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &error, &about_resource)); |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(about_resource); |
-} |
- |
-TEST_F(JobSchedulerTest, GetAppList) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AppList> app_list; |
- |
- scheduler_->GetAppList( |
- google_apis::test_util::CreateCopyResultCallback(&error, &app_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(app_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetAllFileList) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileList> file_list; |
- |
- scheduler_->GetAllFileList( |
- google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(file_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetFileListInDirectory) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileList> file_list; |
- |
- scheduler_->GetFileListInDirectory( |
- fake_drive_service_->GetRootResourceId(), |
- google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(file_list); |
-} |
- |
-TEST_F(JobSchedulerTest, Search) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileList> file_list; |
- |
- scheduler_->Search( |
- "File", // search query |
- google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(file_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetChangeList) { |
- ConnectToWifi(); |
- |
- int64 old_largest_change_id = |
- fake_drive_service_->about_resource().largest_change_id(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- |
- // Create a new directory. |
- { |
- scoped_ptr<google_apis::FileResource> entry; |
- fake_drive_service_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), "new directory", |
- AddNewDirectoryOptions(), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- ASSERT_EQ(google_apis::HTTP_CREATED, error); |
- } |
- |
- error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::ChangeList> change_list; |
- scheduler_->GetChangeList( |
- old_largest_change_id + 1, |
- google_apis::test_util::CreateCopyResultCallback(&error, &change_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(change_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetRemainingChangeList) { |
- ConnectToWifi(); |
- fake_drive_service_->set_default_max_results(2); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::ChangeList> change_list; |
- |
- scheduler_->GetChangeList( |
- 0, |
- google_apis::test_util::CreateCopyResultCallback(&error, &change_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(change_list); |
- |
- // Keep the next url before releasing the |change_list|. |
- GURL next_url(change_list->next_link()); |
- |
- error = google_apis::DRIVE_OTHER_ERROR; |
- change_list.reset(); |
- |
- scheduler_->GetRemainingChangeList( |
- next_url, |
- google_apis::test_util::CreateCopyResultCallback(&error, &change_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(change_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetRemainingFileList) { |
- ConnectToWifi(); |
- fake_drive_service_->set_default_max_results(2); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileList> file_list; |
- |
- scheduler_->GetFileListInDirectory( |
- fake_drive_service_->GetRootResourceId(), |
- google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(file_list); |
- |
- // Keep the next url before releasing the |file_list|. |
- GURL next_url(file_list->next_link()); |
- |
- error = google_apis::DRIVE_OTHER_ERROR; |
- file_list.reset(); |
- |
- scheduler_->GetRemainingFileList( |
- next_url, |
- google_apis::test_util::CreateCopyResultCallback(&error, &file_list)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(file_list); |
-} |
- |
-TEST_F(JobSchedulerTest, GetFileResource) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- |
- scheduler_->GetFileResource( |
- "2_file_resource_id", // resource ID |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(entry); |
-} |
- |
-TEST_F(JobSchedulerTest, GetShareUrl) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- GURL share_url; |
- |
- scheduler_->GetShareUrl( |
- "2_file_resource_id", // resource ID |
- GURL("chrome-extension://test-id/"), // embed origin |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &share_url)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_FALSE(share_url.is_empty()); |
-} |
- |
-TEST_F(JobSchedulerTest, TrashResource) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- |
- scheduler_->TrashResource( |
- "2_file_resource_id", |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
-} |
- |
-TEST_F(JobSchedulerTest, CopyResource) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- |
- scheduler_->CopyResource( |
- "2_file_resource_id", // resource ID |
- "1_folder_resource_id", // parent resource ID |
- "New Document", // new title |
- base::Time(), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(entry); |
-} |
- |
-TEST_F(JobSchedulerTest, UpdateResource) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- |
- scheduler_->UpdateResource( |
- "2_file_resource_id", // resource ID |
- "1_folder_resource_id", // parent resource ID |
- "New Document", // new title |
- base::Time(), base::Time(), google_apis::drive::Properties(), |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(entry); |
-} |
- |
-TEST_F(JobSchedulerTest, AddResourceToDirectory) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- |
- scheduler_->AddResourceToDirectory( |
- "1_folder_resource_id", |
- "2_file_resource_id", |
- google_apis::test_util::CreateCopyResultCallback(&error)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, error); |
-} |
- |
-TEST_F(JobSchedulerTest, RemoveResourceFromDirectory) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- |
- scheduler_->RemoveResourceFromDirectory( |
- "1_folder_resource_id", |
- "subdirectory_file_1_id", // resource ID |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_NO_CONTENT, error); |
-} |
- |
-TEST_F(JobSchedulerTest, AddNewDirectory) { |
- ConnectToWifi(); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), // Root directory. |
- "New Directory", AddNewDirectoryOptions(), ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(google_apis::HTTP_CREATED, error); |
- ASSERT_TRUE(entry); |
-} |
- |
-TEST_F(JobSchedulerTest, PriorityHandling) { |
- // Saturate the metadata job queue with uninteresting jobs to prevent |
- // following jobs from starting. |
- google_apis::DriveApiErrorCode error_dontcare = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry_dontcare; |
- for (int i = 0; i < GetMetadataQueueMaxJobCount(); ++i) { |
- std::string resource_id("2_file_resource_id"); |
- scheduler_->GetFileResource( |
- resource_id, |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error_dontcare, |
- &entry_dontcare)); |
- } |
- |
- // Start jobs with different priorities. |
- std::string title_1("new file 1"); |
- std::string title_2("new file 2"); |
- std::string title_3("new file 3"); |
- std::string title_4("new file 4"); |
- std::vector<std::string> titles; |
- |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), title_1, |
- AddNewDirectoryOptions(), ClientContext(USER_INITIATED), |
- base::Bind(&CopyTitleFromFileResourceCallback, &titles)); |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), title_2, |
- AddNewDirectoryOptions(), ClientContext(BACKGROUND), |
- base::Bind(&CopyTitleFromFileResourceCallback, &titles)); |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), title_3, |
- AddNewDirectoryOptions(), ClientContext(BACKGROUND), |
- base::Bind(&CopyTitleFromFileResourceCallback, &titles)); |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), title_4, |
- AddNewDirectoryOptions(), ClientContext(USER_INITIATED), |
- base::Bind(&CopyTitleFromFileResourceCallback, &titles)); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- ASSERT_EQ(4ul, titles.size()); |
- EXPECT_EQ(title_1, titles[0]); |
- EXPECT_EQ(title_4, titles[1]); |
- EXPECT_EQ(title_2, titles[2]); |
- EXPECT_EQ(title_3, titles[3]); |
-} |
- |
-TEST_F(JobSchedulerTest, NoConnectionUserInitiated) { |
- ConnectToNone(); |
- |
- std::string resource_id("2_file_resource_id"); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- scheduler_->GetFileResource( |
- resource_id, |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_EQ(google_apis::DRIVE_NO_CONNECTION, error); |
-} |
- |
-TEST_F(JobSchedulerTest, NoConnectionBackground) { |
- ConnectToNone(); |
- |
- std::string resource_id("2_file_resource_id"); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- scheduler_->GetFileResource( |
- resource_id, |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_FALSE(entry); |
- |
- // Reconnect to the net. |
- ConnectToWifi(); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, error); |
- ASSERT_TRUE(entry); |
-} |
- |
-TEST_F(JobSchedulerTest, DownloadFileCellularDisabled) { |
- ConnectToCellular(); |
- |
- // Disable fetching over cellular network. |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, true); |
- |
- // Try to get a file in the background |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- const base::FilePath kOutputFilePath = |
- temp_dir.path().AppendASCII("whatever.txt"); |
- google_apis::DriveApiErrorCode download_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- base::FilePath output_file_path; |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- kOutputFilePath, |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback( |
- &download_error, &output_file_path), |
- google_apis::GetContentCallback()); |
- // Metadata should still work |
- google_apis::DriveApiErrorCode metadata_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- |
- // Try to get the metadata |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &metadata_error, &about_resource)); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the metadata |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error); |
- ASSERT_TRUE(about_resource); |
- |
- // Check the download |
- EXPECT_EQ(google_apis::DRIVE_OTHER_ERROR, download_error); |
- |
- // Switch to a Wifi connection |
- ConnectToWifi(); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the download again |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error); |
- std::string content; |
- EXPECT_EQ(output_file_path, kOutputFilePath); |
- ASSERT_TRUE(base::ReadFileToString(output_file_path, &content)); |
- EXPECT_EQ("This is some test content.", content); |
-} |
- |
-TEST_F(JobSchedulerTest, DownloadFileWimaxDisabled) { |
- ConnectToWimax(); |
- |
- // Disable fetching over cellular network. |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, true); |
- |
- // Try to get a file in the background |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- const base::FilePath kOutputFilePath = |
- temp_dir.path().AppendASCII("whatever.txt"); |
- google_apis::DriveApiErrorCode download_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- base::FilePath output_file_path; |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- kOutputFilePath, |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback( |
- &download_error, &output_file_path), |
- google_apis::GetContentCallback()); |
- // Metadata should still work |
- google_apis::DriveApiErrorCode metadata_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- |
- // Try to get the metadata |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &metadata_error, &about_resource)); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the metadata |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error); |
- ASSERT_TRUE(about_resource); |
- |
- // Check the download |
- EXPECT_EQ(google_apis::DRIVE_OTHER_ERROR, download_error); |
- |
- // Switch to a Wifi connection |
- ConnectToWifi(); |
- |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the download again |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error); |
- std::string content; |
- EXPECT_EQ(output_file_path, kOutputFilePath); |
- ASSERT_TRUE(base::ReadFileToString(output_file_path, &content)); |
- EXPECT_EQ("This is some test content.", content); |
-} |
- |
-TEST_F(JobSchedulerTest, DownloadFileCellularEnabled) { |
- ConnectToCellular(); |
- |
- // Enable fetching over cellular network. |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, false); |
- |
- // Try to get a file in the background |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- const base::FilePath kOutputFilePath = |
- temp_dir.path().AppendASCII("whatever.txt"); |
- google_apis::DriveApiErrorCode download_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- base::FilePath output_file_path; |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- kOutputFilePath, |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback( |
- &download_error, &output_file_path), |
- google_apis::GetContentCallback()); |
- // Metadata should still work |
- google_apis::DriveApiErrorCode metadata_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- |
- // Try to get the metadata |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &metadata_error, &about_resource)); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the metadata |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error); |
- ASSERT_TRUE(about_resource); |
- |
- // Check the download |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error); |
- std::string content; |
- EXPECT_EQ(output_file_path, kOutputFilePath); |
- ASSERT_TRUE(base::ReadFileToString(output_file_path, &content)); |
- EXPECT_EQ("This is some test content.", content); |
-} |
- |
-TEST_F(JobSchedulerTest, DownloadFileWimaxEnabled) { |
- ConnectToWimax(); |
- |
- // Enable fetching over cellular network. |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, false); |
- |
- // Try to get a file in the background |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- const base::FilePath kOutputFilePath = |
- temp_dir.path().AppendASCII("whatever.txt"); |
- google_apis::DriveApiErrorCode download_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- base::FilePath output_file_path; |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- kOutputFilePath, |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback( |
- &download_error, &output_file_path), |
- google_apis::GetContentCallback()); |
- // Metadata should still work |
- google_apis::DriveApiErrorCode metadata_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- |
- // Try to get the metadata |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &metadata_error, &about_resource)); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Check the metadata |
- ASSERT_EQ(google_apis::HTTP_SUCCESS, metadata_error); |
- ASSERT_TRUE(about_resource); |
- |
- // Check the download |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error); |
- std::string content; |
- EXPECT_EQ(output_file_path, kOutputFilePath); |
- ASSERT_TRUE(base::ReadFileToString(output_file_path, &content)); |
- EXPECT_EQ("This is some test content.", content); |
-} |
- |
-TEST_F(JobSchedulerTest, JobInfo) { |
- JobListLogger logger; |
- scheduler_->AddObserver(&logger); |
- |
- // Disable background upload/download. |
- ConnectToWimax(); |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, true); |
- |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- scoped_ptr<google_apis::AboutResource> about_resource; |
- base::FilePath path; |
- |
- std::set<JobType> expected_types; |
- |
- // Add many jobs. |
- expected_types.insert(TYPE_ADD_NEW_DIRECTORY); |
- scheduler_->AddNewDirectory( |
- fake_drive_service_->GetRootResourceId(), "New Directory", |
- AddNewDirectoryOptions(), ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- expected_types.insert(TYPE_GET_ABOUT_RESOURCE); |
- scheduler_->GetAboutResource( |
- google_apis::test_util::CreateCopyResultCallback( |
- &error, &about_resource)); |
- expected_types.insert(TYPE_UPDATE_RESOURCE); |
- scheduler_->UpdateResource( |
- "2_file_resource_id", std::string(), "New Title", base::Time(), |
- base::Time(), google_apis::drive::Properties(), |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- expected_types.insert(TYPE_DOWNLOAD_FILE); |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- temp_dir.path().AppendASCII("whatever.txt"), |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&error, &path), |
- google_apis::GetContentCallback()); |
- |
- // The number of jobs queued so far. |
- EXPECT_EQ(4U, scheduler_->GetJobInfoList().size()); |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_ADD_NEW_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_GET_ABOUT_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_UPDATE_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_DOWNLOAD_FILE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_ADD_NEW_DIRECTORY)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_GET_ABOUT_RESOURCE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_UPDATE_RESOURCE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE)); |
- |
- // Add more jobs. |
- expected_types.insert(TYPE_ADD_RESOURCE_TO_DIRECTORY); |
- scheduler_->AddResourceToDirectory( |
- "1_folder_resource_id", |
- "2_file_resource_id", |
- google_apis::test_util::CreateCopyResultCallback(&error)); |
- expected_types.insert(TYPE_COPY_RESOURCE); |
- scheduler_->CopyResource( |
- "5_document_resource_id", |
- fake_drive_service_->GetRootResourceId(), |
- "New Document", |
- base::Time(), // last_modified |
- google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
- |
- // 6 jobs in total were queued. |
- std::vector<JobInfo> jobs = scheduler_->GetJobInfoList(); |
- EXPECT_EQ(6U, jobs.size()); |
- std::set<JobType> actual_types; |
- std::set<JobID> job_ids; |
- for (size_t i = 0; i < jobs.size(); ++i) { |
- actual_types.insert(jobs[i].job_type); |
- job_ids.insert(jobs[i].job_id); |
- } |
- EXPECT_EQ(expected_types, actual_types); |
- EXPECT_EQ(6U, job_ids.size()) << "All job IDs must be unique"; |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_ADD_RESOURCE_TO_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_COPY_RESOURCE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_COPY_RESOURCE)); |
- |
- // Run the jobs. |
- base::RunLoop().RunUntilIdle(); |
- |
- // All jobs except the BACKGROUND job should have started running (UPDATED) |
- // and then finished (DONE). |
- jobs = scheduler_->GetJobInfoList(); |
- ASSERT_EQ(1U, jobs.size()); |
- EXPECT_EQ(TYPE_DOWNLOAD_FILE, jobs[0].job_type); |
- |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_ADD_NEW_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_GET_ABOUT_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_UPDATE_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, |
- TYPE_ADD_RESOURCE_TO_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_COPY_RESOURCE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::UPDATED, TYPE_DOWNLOAD_FILE)); |
- |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_ADD_NEW_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_GET_ABOUT_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_UPDATE_RESOURCE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY)); |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_COPY_RESOURCE)); |
- EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE)); |
- |
- // Run the background downloading job as well. |
- ConnectToWifi(); |
- base::RunLoop().RunUntilIdle(); |
- |
- // All jobs should have finished. |
- EXPECT_EQ(0U, scheduler_->GetJobInfoList().size()); |
- EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_DOWNLOAD_FILE)); |
- EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE)); |
-} |
- |
-TEST_F(JobSchedulerTest, JobInfoProgress) { |
- JobListLogger logger; |
- scheduler_->AddObserver(&logger); |
- |
- ConnectToWifi(); |
- |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- |
- google_apis::DriveApiErrorCode error = google_apis::DRIVE_OTHER_ERROR; |
- base::FilePath path; |
- |
- // Download job. |
- scheduler_->DownloadFile( |
- base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path |
- kDummyDownloadFileSize, |
- temp_dir.path().AppendASCII("whatever.txt"), |
- "2_file_resource_id", |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&error, &path), |
- google_apis::GetContentCallback()); |
- base::RunLoop().RunUntilIdle(); |
- |
- std::vector<int64> download_progress; |
- logger.GetProgressInfo(TYPE_DOWNLOAD_FILE, &download_progress); |
- ASSERT_TRUE(!download_progress.empty()); |
- EXPECT_TRUE(base::STLIsSorted(download_progress)); |
- EXPECT_GE(download_progress.front(), 0); |
- EXPECT_LE(download_progress.back(), 26); |
- |
- // Upload job. |
- path = temp_dir.path().AppendASCII("new_file.txt"); |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile(path, "Hello")); |
- google_apis::DriveApiErrorCode upload_error = |
- google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- |
- scheduler_->UploadNewFile( |
- fake_drive_service_->GetRootResourceId(), std::string("Hello").size(), |
- base::FilePath::FromUTF8Unsafe("drive/new_file.txt"), path, "dummy title", |
- "plain/plain", UploadNewFileOptions(), ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&upload_error, &entry)); |
- base::RunLoop().RunUntilIdle(); |
- |
- std::vector<int64> upload_progress; |
- logger.GetProgressInfo(TYPE_UPLOAD_NEW_FILE, &upload_progress); |
- ASSERT_TRUE(!upload_progress.empty()); |
- EXPECT_TRUE(base::STLIsSorted(upload_progress)); |
- EXPECT_GE(upload_progress.front(), 0); |
- EXPECT_LE(upload_progress.back(), 13); |
-} |
- |
-TEST_F(JobSchedulerTest, CancelPendingJob) { |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- base::FilePath upload_path = temp_dir.path().AppendASCII("new_file.txt"); |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile(upload_path, "Hello")); |
- |
- // To create a pending job for testing, set the mode to cellular connection |
- // and issue BACKGROUND jobs. |
- ConnectToCellular(); |
- pref_service_->SetBoolean(prefs::kDisableDriveOverCellular, true); |
- |
- // Start the first job and record its job ID. |
- google_apis::DriveApiErrorCode error1 = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- scheduler_->UploadNewFile( |
- fake_drive_service_->GetRootResourceId(), std::string("Hello").size(), |
- base::FilePath::FromUTF8Unsafe("dummy/path"), upload_path, |
- "dummy title 1", "text/plain", UploadNewFileOptions(), |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&error1, &entry)); |
- |
- const std::vector<JobInfo>& jobs = scheduler_->GetJobInfoList(); |
- ASSERT_EQ(1u, jobs.size()); |
- ASSERT_EQ(STATE_NONE, jobs[0].state); // Not started yet. |
- JobID first_job_id = jobs[0].job_id; |
- |
- // Start the second job. |
- google_apis::DriveApiErrorCode error2 = google_apis::DRIVE_OTHER_ERROR; |
- scheduler_->UploadNewFile( |
- fake_drive_service_->GetRootResourceId(), std::string("Hello").size(), |
- base::FilePath::FromUTF8Unsafe("dummy/path"), upload_path, |
- "dummy title 2", "text/plain", UploadNewFileOptions(), |
- ClientContext(BACKGROUND), |
- google_apis::test_util::CreateCopyResultCallback(&error2, &entry)); |
- |
- // Cancel the first one. |
- scheduler_->CancelJob(first_job_id); |
- |
- // Only the first job should be cancelled. |
- ConnectToWifi(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(google_apis::DRIVE_CANCELLED, error1); |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, error2); |
- EXPECT_TRUE(scheduler_->GetJobInfoList().empty()); |
-} |
- |
-TEST_F(JobSchedulerTest, CancelRunningJob) { |
- ConnectToWifi(); |
- |
- base::ScopedTempDir temp_dir; |
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
- base::FilePath upload_path = temp_dir.path().AppendASCII("new_file.txt"); |
- ASSERT_TRUE(google_apis::test_util::WriteStringToFile(upload_path, "Hello")); |
- |
- // Run as a cancelable task. |
- fake_drive_service_->set_upload_new_file_cancelable(true); |
- google_apis::DriveApiErrorCode error1 = google_apis::DRIVE_OTHER_ERROR; |
- scoped_ptr<google_apis::FileResource> entry; |
- scheduler_->UploadNewFile( |
- fake_drive_service_->GetRootResourceId(), std::string("Hello").size(), |
- base::FilePath::FromUTF8Unsafe("dummy/path"), upload_path, |
- "dummy title 1", "text/plain", UploadNewFileOptions(), |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error1, &entry)); |
- |
- const std::vector<JobInfo>& jobs = scheduler_->GetJobInfoList(); |
- ASSERT_EQ(1u, jobs.size()); |
- ASSERT_EQ(STATE_RUNNING, jobs[0].state); // It's running. |
- JobID first_job_id = jobs[0].job_id; |
- |
- // Start the second job normally. |
- fake_drive_service_->set_upload_new_file_cancelable(false); |
- google_apis::DriveApiErrorCode error2 = google_apis::DRIVE_OTHER_ERROR; |
- scheduler_->UploadNewFile( |
- fake_drive_service_->GetRootResourceId(), std::string("Hello").size(), |
- base::FilePath::FromUTF8Unsafe("dummy/path"), upload_path, |
- "dummy title 2", "text/plain", UploadNewFileOptions(), |
- ClientContext(USER_INITIATED), |
- google_apis::test_util::CreateCopyResultCallback(&error2, &entry)); |
- |
- // Cancel the first one. |
- scheduler_->CancelJob(first_job_id); |
- |
- // Only the first job should be cancelled. |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(google_apis::DRIVE_CANCELLED, error1); |
- EXPECT_EQ(google_apis::HTTP_SUCCESS, error2); |
- EXPECT_TRUE(scheduler_->GetJobInfoList().empty()); |
-} |
- |
-} // namespace drive |