| Index: chrome/browser/chromeos/drive/drive_scheduler_unittest.cc
|
| diff --git a/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc b/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc
|
| index ae7f2db4631f977be680bebcf45ec706a0e19314..45658053f885093232cc6e03daf0644e30c986d9 100644
|
| --- a/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc
|
| +++ b/chrome/browser/chromeos/drive/drive_scheduler_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/bind.h"
|
| #include "base/file_util.h"
|
| #include "base/prefs/pref_service.h"
|
| +#include "base/stl_util.h"
|
| #include "base/threading/sequenced_worker_pool.h"
|
| #include "chrome/browser/chromeos/drive/drive_test_util.h"
|
| #include "chrome/browser/google_apis/drive_api_parser.h"
|
| @@ -45,6 +46,56 @@ void CopyResourceIdFromGetResourceEntryCallback(
|
| id_list_out->push_back(requested_id);
|
| }
|
|
|
| +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.
|
| + virtual void OnJobAdded(const JobInfo& info) OVERRIDE {
|
| + events.push_back(EventLog(ADDED, info));
|
| + }
|
| +
|
| + virtual void OnJobUpdated(const JobInfo& info) OVERRIDE {
|
| + events.push_back(EventLog(UPDATED, info));
|
| + }
|
| +
|
| + virtual void OnJobDone(const JobInfo& info, DriveFileError error) OVERRIDE {
|
| + events.push_back(EventLog(DONE, info));
|
| + }
|
| +
|
| + private:
|
| + std::vector<EventLog> events;
|
| +};
|
| +
|
| } // namespace
|
|
|
| class DriveSchedulerTest : public testing::Test {
|
| @@ -647,6 +698,9 @@ TEST_F(DriveSchedulerTest, DownloadFileWimaxEnabled) {
|
| }
|
|
|
| TEST_F(DriveSchedulerTest, JobInfo) {
|
| + JobListLogger logger;
|
| + scheduler_->AddObserver(&logger);
|
| +
|
| // Disable background upload/download.
|
| ConnectToWimax();
|
| profile_->GetPrefs()->SetBoolean(prefs::kDisableDriveOverCellular, true);
|
| @@ -687,6 +741,14 @@ TEST_F(DriveSchedulerTest, JobInfo) {
|
|
|
| // 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_ACCOUNT_METADATA));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_RENAME_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_ACCOUNT_METADATA));
|
| + EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_RENAME_RESOURCE));
|
| + EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE));
|
|
|
| // Add more jobs.
|
| expected_types.insert(TYPE_ADD_RESOURCE_TO_DIRECTORY);
|
| @@ -704,24 +766,106 @@ TEST_F(DriveSchedulerTest, JobInfo) {
|
| std::vector<JobInfo> jobs = scheduler_->GetJobInfoList();
|
| EXPECT_EQ(6U, jobs.size());
|
| std::set<JobType> actual_types;
|
| - for (size_t i = 0; i < jobs.size(); ++i)
|
| + 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_HOSTED_DOCUMENT));
|
| + EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY));
|
| + EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_COPY_HOSTED_DOCUMENT));
|
|
|
| // Run the jobs.
|
| google_apis::test_util::RunBlockingPoolTask();
|
|
|
| - // All jobs except the BACKGROUND job should have finished.
|
| + // 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_ACCOUNT_METADATA));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_RENAME_RESOURCE));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::UPDATED,
|
| + TYPE_ADD_RESOURCE_TO_DIRECTORY));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_COPY_HOSTED_DOCUMENT));
|
| + 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_ACCOUNT_METADATA));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_RENAME_RESOURCE));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY));
|
| + EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_COPY_HOSTED_DOCUMENT));
|
| + EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE));
|
| +
|
| // Run the background downloading job as well.
|
| ConnectToWifi();
|
| google_apis::test_util::RunBlockingPoolTask();
|
|
|
| // 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(DriveSchedulerTest, JobInfoProgress) {
|
| + JobListLogger logger;
|
| + scheduler_->AddObserver(&logger);
|
| +
|
| + ConnectToWifi();
|
| +
|
| + base::ScopedTempDir temp_dir;
|
| + ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
|
| +
|
| + google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
|
| + base::FilePath path;
|
| +
|
| + // Download job.
|
| + scheduler_->DownloadFile(
|
| + base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path
|
| + temp_dir.path().AppendASCII("whatever.txt"),
|
| + GURL("https://file_content_url/"),
|
| + DriveClientContext(BACKGROUND),
|
| + google_apis::test_util::CreateCopyResultCallback(&error, &path),
|
| + google_apis::GetContentCallback());
|
| + google_apis::test_util::RunBlockingPoolTask();
|
| +
|
| + 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(), 10);
|
| +
|
| + // Upload job.
|
| + path = temp_dir.path().AppendASCII("new_file.txt");
|
| + file_util::WriteFile(path, "Hello", 5);
|
| + google_apis::DriveUploadError upload_error =
|
| + google_apis::DRIVE_UPLOAD_ERROR_ABORT;
|
| + scoped_ptr<google_apis::ResourceEntry> entry;
|
| +
|
| + scheduler_->UploadNewFile(
|
| + fake_drive_service_->GetRootResourceId(),
|
| + base::FilePath::FromUTF8Unsafe("drive/new_file.txt"),
|
| + path,
|
| + "dummy title",
|
| + "plain/plain",
|
| + DriveClientContext(BACKGROUND),
|
| + google_apis::test_util::CreateCopyResultCallback(
|
| + &upload_error, &path, &path, &entry));
|
| + google_apis::test_util::RunBlockingPoolTask();
|
| +
|
| + 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(), 5);
|
| }
|
|
|
| } // namespace drive
|
|
|