Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Side by Side Diff: chrome/browser/chromeos/drive/drive_scheduler_unittest.cc

Issue 14367010: Fire event notification from DriveScheduler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/chromeos/drive/drive_scheduler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/drive/drive_scheduler.h" 5 #include "chrome/browser/chromeos/drive/drive_scheduler.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "base/stl_util.h"
12 #include "base/threading/sequenced_worker_pool.h" 13 #include "base/threading/sequenced_worker_pool.h"
13 #include "chrome/browser/chromeos/drive/drive_test_util.h" 14 #include "chrome/browser/chromeos/drive/drive_test_util.h"
14 #include "chrome/browser/google_apis/drive_api_parser.h" 15 #include "chrome/browser/google_apis/drive_api_parser.h"
15 #include "chrome/browser/google_apis/fake_drive_service.h" 16 #include "chrome/browser/google_apis/fake_drive_service.h"
16 #include "chrome/browser/google_apis/gdata_wapi_parser.h" 17 #include "chrome/browser/google_apis/gdata_wapi_parser.h"
17 #include "chrome/common/pref_names.h" 18 #include "chrome/common/pref_names.h"
18 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/testing_profile.h"
19 #include "content/public/test/test_browser_thread.h" 20 #include "content/public/test/test_browser_thread.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 22
(...skipping 16 matching lines...) Expand all
38 }; 39 };
39 40
40 void CopyResourceIdFromGetResourceEntryCallback( 41 void CopyResourceIdFromGetResourceEntryCallback(
41 std::vector<std::string>* id_list_out, 42 std::vector<std::string>* id_list_out,
42 const std::string& requested_id, 43 const std::string& requested_id,
43 google_apis::GDataErrorCode error_in, 44 google_apis::GDataErrorCode error_in,
44 scoped_ptr<google_apis::ResourceEntry> resource_entry_in) { 45 scoped_ptr<google_apis::ResourceEntry> resource_entry_in) {
45 id_list_out->push_back(requested_id); 46 id_list_out->push_back(requested_id);
46 } 47 }
47 48
49 class JobListLogger : public JobListObserver {
50 public:
51 enum EventType {
52 ADDED,
53 UPDATED,
54 DONE,
55 };
56
57 struct EventLog {
58 EventType type;
59 JobInfo info;
60
61 EventLog(EventType type, const JobInfo& info) : type(type), info(info) {
62 }
63 };
64
65 // Checks whether the specified type of event has occurred.
66 bool Has(EventType type, JobType job_type) {
67 for (size_t i = 0; i < events.size(); ++i) {
68 if (events[i].type == type && events[i].info.job_type == job_type)
69 return true;
70 }
71 return false;
72 }
73
74 // Gets the progress event information of the specified type.
75 void GetProgressInfo(JobType job_type, std::vector<int64>* progress) {
76 for (size_t i = 0; i < events.size(); ++i) {
77 if (events[i].type == UPDATED && events[i].info.job_type == job_type)
78 progress->push_back(events[i].info.num_completed_bytes);
79 }
80 }
81
82 // JobListObserver overrides.
83 virtual void OnJobAdded(const JobInfo& info) OVERRIDE {
84 events.push_back(EventLog(ADDED, info));
85 }
86
87 virtual void OnJobUpdated(const JobInfo& info) OVERRIDE {
88 events.push_back(EventLog(UPDATED, info));
89 }
90
91 virtual void OnJobDone(const JobInfo& info, DriveFileError error) OVERRIDE {
92 events.push_back(EventLog(DONE, info));
93 }
94
95 private:
96 std::vector<EventLog> events;
97 };
98
48 } // namespace 99 } // namespace
49 100
50 class DriveSchedulerTest : public testing::Test { 101 class DriveSchedulerTest : public testing::Test {
51 public: 102 public:
52 DriveSchedulerTest() 103 DriveSchedulerTest()
53 : ui_thread_(content::BrowserThread::UI, &message_loop_), 104 : ui_thread_(content::BrowserThread::UI, &message_loop_),
54 profile_(new TestingProfile) { 105 profile_(new TestingProfile) {
55 } 106 }
56 107
57 virtual void SetUp() OVERRIDE { 108 virtual void SetUp() OVERRIDE {
(...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 // Check the download 691 // Check the download
641 EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error); 692 EXPECT_EQ(google_apis::HTTP_SUCCESS, download_error);
642 std::string content; 693 std::string content;
643 EXPECT_EQ(output_file_path, kOutputFilePath); 694 EXPECT_EQ(output_file_path, kOutputFilePath);
644 ASSERT_TRUE(file_util::ReadFileToString(output_file_path, &content)); 695 ASSERT_TRUE(file_util::ReadFileToString(output_file_path, &content));
645 // The content is "x"s of the file size specified in root_feed.json. 696 // The content is "x"s of the file size specified in root_feed.json.
646 EXPECT_EQ("xxxxxxxxxx", content); 697 EXPECT_EQ("xxxxxxxxxx", content);
647 } 698 }
648 699
649 TEST_F(DriveSchedulerTest, JobInfo) { 700 TEST_F(DriveSchedulerTest, JobInfo) {
701 JobListLogger logger;
702 scheduler_->AddObserver(&logger);
703
650 // Disable background upload/download. 704 // Disable background upload/download.
651 ConnectToWimax(); 705 ConnectToWimax();
652 profile_->GetPrefs()->SetBoolean(prefs::kDisableDriveOverCellular, true); 706 profile_->GetPrefs()->SetBoolean(prefs::kDisableDriveOverCellular, true);
653 707
654 base::ScopedTempDir temp_dir; 708 base::ScopedTempDir temp_dir;
655 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); 709 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
656 710
657 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; 711 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
658 scoped_ptr<google_apis::ResourceEntry> entry; 712 scoped_ptr<google_apis::ResourceEntry> entry;
659 scoped_ptr<google_apis::AccountMetadata> account_metadata; 713 scoped_ptr<google_apis::AccountMetadata> account_metadata;
(...skipping 20 matching lines...) Expand all
680 scheduler_->DownloadFile( 734 scheduler_->DownloadFile(
681 base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path 735 base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path
682 temp_dir.path().AppendASCII("whatever.txt"), 736 temp_dir.path().AppendASCII("whatever.txt"),
683 GURL("https://file_content_url/"), 737 GURL("https://file_content_url/"),
684 DriveClientContext(BACKGROUND), 738 DriveClientContext(BACKGROUND),
685 google_apis::test_util::CreateCopyResultCallback(&error, &path), 739 google_apis::test_util::CreateCopyResultCallback(&error, &path),
686 google_apis::GetContentCallback()); 740 google_apis::GetContentCallback());
687 741
688 // The number of jobs queued so far. 742 // The number of jobs queued so far.
689 EXPECT_EQ(4U, scheduler_->GetJobInfoList().size()); 743 EXPECT_EQ(4U, scheduler_->GetJobInfoList().size());
744 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_ADD_NEW_DIRECTORY));
745 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_GET_ACCOUNT_METADATA));
746 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_RENAME_RESOURCE));
747 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_DOWNLOAD_FILE));
748 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_ADD_NEW_DIRECTORY));
749 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_GET_ACCOUNT_METADATA));
750 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_RENAME_RESOURCE));
751 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE));
690 752
691 // Add more jobs. 753 // Add more jobs.
692 expected_types.insert(TYPE_ADD_RESOURCE_TO_DIRECTORY); 754 expected_types.insert(TYPE_ADD_RESOURCE_TO_DIRECTORY);
693 scheduler_->AddResourceToDirectory( 755 scheduler_->AddResourceToDirectory(
694 "folder:1_folder_resource_id", 756 "folder:1_folder_resource_id",
695 "file:2_file_resource_id", 757 "file:2_file_resource_id",
696 google_apis::test_util::CreateCopyResultCallback(&error)); 758 google_apis::test_util::CreateCopyResultCallback(&error));
697 expected_types.insert(TYPE_COPY_HOSTED_DOCUMENT); 759 expected_types.insert(TYPE_COPY_HOSTED_DOCUMENT);
698 scheduler_->CopyHostedDocument( 760 scheduler_->CopyHostedDocument(
699 "document:5_document_resource_id", 761 "document:5_document_resource_id",
700 "New Document", 762 "New Document",
701 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); 763 google_apis::test_util::CreateCopyResultCallback(&error, &entry));
702 764
703 // 6 jobs in total were queued. 765 // 6 jobs in total were queued.
704 std::vector<JobInfo> jobs = scheduler_->GetJobInfoList(); 766 std::vector<JobInfo> jobs = scheduler_->GetJobInfoList();
705 EXPECT_EQ(6U, jobs.size()); 767 EXPECT_EQ(6U, jobs.size());
706 std::set<JobType> actual_types; 768 std::set<JobType> actual_types;
707 for (size_t i = 0; i < jobs.size(); ++i) 769 std::set<JobID> job_ids;
770 for (size_t i = 0; i < jobs.size(); ++i) {
708 actual_types.insert(jobs[i].job_type); 771 actual_types.insert(jobs[i].job_type);
772 job_ids.insert(jobs[i].job_id);
773 }
709 EXPECT_EQ(expected_types, actual_types); 774 EXPECT_EQ(expected_types, actual_types);
775 EXPECT_EQ(6U, job_ids.size()) << "All job IDs must be unique";
776 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_ADD_RESOURCE_TO_DIRECTORY));
777 EXPECT_TRUE(logger.Has(JobListLogger::ADDED, TYPE_COPY_HOSTED_DOCUMENT));
778 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY));
779 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_COPY_HOSTED_DOCUMENT));
710 780
711 // Run the jobs. 781 // Run the jobs.
712 google_apis::test_util::RunBlockingPoolTask(); 782 google_apis::test_util::RunBlockingPoolTask();
713 783
714 // All jobs except the BACKGROUND job should have finished. 784 // All jobs except the BACKGROUND job should have started running (UPDATED)
785 // and then finished (DONE).
715 jobs = scheduler_->GetJobInfoList(); 786 jobs = scheduler_->GetJobInfoList();
716 ASSERT_EQ(1U, jobs.size()); 787 ASSERT_EQ(1U, jobs.size());
717 EXPECT_EQ(TYPE_DOWNLOAD_FILE, jobs[0].job_type); 788 EXPECT_EQ(TYPE_DOWNLOAD_FILE, jobs[0].job_type);
718 789
790 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_ADD_NEW_DIRECTORY));
791 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_GET_ACCOUNT_METADATA));
792 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_RENAME_RESOURCE));
793 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED,
794 TYPE_ADD_RESOURCE_TO_DIRECTORY));
795 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_COPY_HOSTED_DOCUMENT));
796 EXPECT_FALSE(logger.Has(JobListLogger::UPDATED, TYPE_DOWNLOAD_FILE));
797
798 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_ADD_NEW_DIRECTORY));
799 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_GET_ACCOUNT_METADATA));
800 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_RENAME_RESOURCE));
801 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_ADD_RESOURCE_TO_DIRECTORY));
802 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_COPY_HOSTED_DOCUMENT));
803 EXPECT_FALSE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE));
804
719 // Run the background downloading job as well. 805 // Run the background downloading job as well.
720 ConnectToWifi(); 806 ConnectToWifi();
721 google_apis::test_util::RunBlockingPoolTask(); 807 google_apis::test_util::RunBlockingPoolTask();
722 808
723 // All jobs should have finished. 809 // All jobs should have finished.
724 EXPECT_EQ(0U, scheduler_->GetJobInfoList().size()); 810 EXPECT_EQ(0U, scheduler_->GetJobInfoList().size());
811 EXPECT_TRUE(logger.Has(JobListLogger::UPDATED, TYPE_DOWNLOAD_FILE));
812 EXPECT_TRUE(logger.Has(JobListLogger::DONE, TYPE_DOWNLOAD_FILE));
813 }
814
815
816 TEST_F(DriveSchedulerTest, JobInfoProgress) {
817 JobListLogger logger;
818 scheduler_->AddObserver(&logger);
819
820 ConnectToWifi();
821
822 base::ScopedTempDir temp_dir;
823 ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
824
825 google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
826 base::FilePath path;
827
828 // Download job.
829 scheduler_->DownloadFile(
830 base::FilePath::FromUTF8Unsafe("drive/whatever.txt"), // virtual path
831 temp_dir.path().AppendASCII("whatever.txt"),
832 GURL("https://file_content_url/"),
833 DriveClientContext(BACKGROUND),
834 google_apis::test_util::CreateCopyResultCallback(&error, &path),
835 google_apis::GetContentCallback());
836 google_apis::test_util::RunBlockingPoolTask();
837
838 std::vector<int64> download_progress;
839 logger.GetProgressInfo(TYPE_DOWNLOAD_FILE, &download_progress);
840 ASSERT_TRUE(!download_progress.empty());
841 EXPECT_TRUE(base::STLIsSorted(download_progress));
842 EXPECT_GE(download_progress.front(), 0);
843 EXPECT_LE(download_progress.back(), 10);
844
845 // Upload job.
846 path = temp_dir.path().AppendASCII("new_file.txt");
847 file_util::WriteFile(path, "Hello", 5);
848 google_apis::DriveUploadError upload_error =
849 google_apis::DRIVE_UPLOAD_ERROR_ABORT;
850 scoped_ptr<google_apis::ResourceEntry> entry;
851
852 scheduler_->UploadNewFile(
853 fake_drive_service_->GetRootResourceId(),
854 base::FilePath::FromUTF8Unsafe("drive/new_file.txt"),
855 path,
856 "dummy title",
857 "plain/plain",
858 DriveClientContext(BACKGROUND),
859 google_apis::test_util::CreateCopyResultCallback(
860 &upload_error, &path, &path, &entry));
861 google_apis::test_util::RunBlockingPoolTask();
862
863 std::vector<int64> upload_progress;
864 logger.GetProgressInfo(TYPE_UPLOAD_NEW_FILE, &upload_progress);
865 ASSERT_TRUE(!upload_progress.empty());
866 EXPECT_TRUE(base::STLIsSorted(upload_progress));
867 EXPECT_GE(upload_progress.front(), 0);
868 EXPECT_LE(upload_progress.back(), 5);
725 } 869 }
726 870
727 } // namespace drive 871 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/drive_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698