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

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/job_event_router_unittest.cc

Issue 1023923002: Files.app: Add JobEventRouter class that handles Job related events of Files.app. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/extensions/file_manager/job_event_router.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace file_manager {
12 namespace {
13
14 class JobEventRouterImpl : public JobEventRouter {
15 public:
16 JobEventRouterImpl() : JobEventRouter(base::TimeDelta::FromMilliseconds(0)) {}
17 std::vector<linked_ptr<base::DictionaryValue>> events;
18
19 protected:
20 GURL ConvertDrivePathToFileSystemUrl(const base::FilePath& path,
21 const std::string& id) const override {
22 return GURL();
23 }
24
25 void BroadcastEvent(const std::string& event_name,
26 scoped_ptr<base::ListValue> event_args) override {
27 ASSERT_EQ(1u, event_args->GetSize());
28 const base::DictionaryValue* event;
29 event_args->GetDictionary(0, &event);
30 events.push_back(make_linked_ptr(event->DeepCopy()));
31 }
32
33 private:
34 DISALLOW_COPY_AND_ASSIGN(JobEventRouterImpl);
35 };
36
37 class JobEventRouterTest : public testing::Test {
38 protected:
39 void SetUp() override { job_event_router.reset(new JobEventRouterImpl()); }
40
41 drive::JobInfo CreateJobInfo(drive::JobID id,
42 int64 num_completed_bytes,
43 int64 num_total_bytes) {
44 drive::JobInfo job(drive::TYPE_DOWNLOAD_FILE);
45 job.job_id = id;
46 job.num_total_bytes = num_total_bytes;
47 job.num_completed_bytes = num_completed_bytes;
48 return job;
49 }
50
51 std::string GetEventString(size_t index, const std::string& name) {
52 std::string value;
53 job_event_router->events[index]->GetString(name, &value);
54 return value;
55 }
56
57 double GetEventDouble(size_t index, const std::string& name) {
58 double value = NAN;
59 job_event_router->events[index]->GetDouble(name, &value);
60 return value;
61 }
62
63 scoped_ptr<JobEventRouterImpl> job_event_router;
64
65 private:
66 base::MessageLoop message_loop_;
67 };
68
69 TEST_F(JobEventRouterTest, Basic) {
70 // Add a job.
71 job_event_router->OnJobAdded(CreateJobInfo(0, 0, 100));
72 // Event should be throttled.
73 ASSERT_EQ(0u, job_event_router->events.size());
74 base::RunLoop().RunUntilIdle();
75 ASSERT_EQ(1u, job_event_router->events.size());
76 EXPECT_EQ("in_progress", GetEventString(0, "transferState"));
77 EXPECT_EQ(0.0f, GetEventDouble(0, "processed"));
78 EXPECT_EQ(100.0f, GetEventDouble(0, "total"));
79 job_event_router->events.clear();
80
81 // Job is updated.
82 job_event_router->OnJobUpdated(CreateJobInfo(0, 50, 100));
83 job_event_router->OnJobUpdated(CreateJobInfo(0, 100, 100));
84 // Event should be throttled.
85 ASSERT_EQ(0u, job_event_router->events.size());
86 base::RunLoop().RunUntilIdle();
87 ASSERT_EQ(1u, job_event_router->events.size());
88 EXPECT_EQ("in_progress", GetEventString(0, "transferState"));
89 EXPECT_EQ(100.0f, GetEventDouble(0, "processed"));
90 EXPECT_EQ(100.0f, GetEventDouble(0, "total"));
91 job_event_router->events.clear();
92
93 // Complete first job.
94 job_event_router->OnJobDone(CreateJobInfo(0, 100, 100), drive::FILE_ERROR_OK);
95 // Complete event should not be throttled.
96 ASSERT_EQ(1u, job_event_router->events.size());
97 EXPECT_EQ("completed", GetEventString(0, "transferState"));
98 EXPECT_EQ(100.0f, GetEventDouble(0, "processed"));
99 EXPECT_EQ(100.0f, GetEventDouble(0, "total"));
100 job_event_router->events.clear();
101 }
102
103 TEST_F(JobEventRouterTest, CompleteWithInvalidCompletedBytes) {
104 job_event_router->OnJobDone(CreateJobInfo(0, 50, 100), drive::FILE_ERROR_OK);
105 ASSERT_EQ(1u, job_event_router->events.size());
106 EXPECT_EQ("completed", GetEventString(0, "transferState"));
107 EXPECT_EQ(100.0f, GetEventDouble(0, "processed"));
108 EXPECT_EQ(100.0f, GetEventDouble(0, "total"));
109 }
110
111 TEST_F(JobEventRouterTest, AnotherJobAddedBeforeComplete) {
112 job_event_router->OnJobAdded(CreateJobInfo(0, 0, 100));
113 job_event_router->OnJobUpdated(CreateJobInfo(0, 50, 100));
114 job_event_router->OnJobAdded(CreateJobInfo(1, 0, 100));
115
116 // Event should be throttled.
117 ASSERT_EQ(0u, job_event_router->events.size());
118 base::RunLoop().RunUntilIdle();
119 ASSERT_EQ(1u, job_event_router->events.size());
120 EXPECT_EQ("in_progress", GetEventString(0, "transferState"));
121 EXPECT_EQ(50.0f, GetEventDouble(0, "processed"));
122 EXPECT_EQ(200.0f, GetEventDouble(0, "total"));
123 job_event_router->events.clear();
124
125 job_event_router->OnJobDone(CreateJobInfo(0, 100, 100), drive::FILE_ERROR_OK);
126 job_event_router->OnJobDone(CreateJobInfo(1, 100, 100), drive::FILE_ERROR_OK);
127 // Complete event should not be throttled.
128 ASSERT_EQ(2u, job_event_router->events.size());
129 EXPECT_EQ("completed", GetEventString(0, "transferState"));
130 EXPECT_EQ(100.0f, GetEventDouble(0, "processed"));
131 EXPECT_EQ(200.0f, GetEventDouble(0, "total"));
132 EXPECT_EQ("completed", GetEventString(1, "transferState"));
133 EXPECT_EQ(200.0f, GetEventDouble(1, "processed"));
134 EXPECT_EQ(200.0f, GetEventDouble(1, "total"));
135 }
136
137 TEST_F(JobEventRouterTest, AnotherJobAddedAfterComplete) {
138 job_event_router->OnJobAdded(CreateJobInfo(0, 0, 100));
139 job_event_router->OnJobUpdated(CreateJobInfo(0, 50, 100));
140 job_event_router->OnJobDone(CreateJobInfo(0, 100, 100), drive::FILE_ERROR_OK);
141 job_event_router->OnJobAdded(CreateJobInfo(1, 0, 100));
142 job_event_router->OnJobDone(CreateJobInfo(1, 100, 100), drive::FILE_ERROR_OK);
143
144 // Complete event should not be throttled.
145 ASSERT_EQ(2u, job_event_router->events.size());
146 EXPECT_EQ("completed", GetEventString(0, "transferState"));
147 EXPECT_EQ(100.0f, GetEventDouble(0, "processed"));
148 // Total byte shold be reset when all tasks complete.
149 EXPECT_EQ(100.0f, GetEventDouble(0, "total"));
150 EXPECT_EQ("completed", GetEventString(1, "transferState"));
151 EXPECT_EQ(100.0f, GetEventDouble(1, "processed"));
152 EXPECT_EQ(100.0f, GetEventDouble(1, "total"));
153 }
154
155 TEST_F(JobEventRouterTest, UpdateTotalSizeAfterAdded) {
156 job_event_router->OnJobAdded(CreateJobInfo(0, 0, 0));
157 base::RunLoop().RunUntilIdle();
158 job_event_router->OnJobUpdated(CreateJobInfo(0, 0, 100));
159 base::RunLoop().RunUntilIdle();
160
161 ASSERT_EQ(2u, job_event_router->events.size());
162
163 EXPECT_EQ("in_progress", GetEventString(0, "transferState"));
164 EXPECT_EQ(0.0f, GetEventDouble(0, "processed"));
165 EXPECT_EQ(0.0f, GetEventDouble(0, "total"));
166
167 EXPECT_EQ("in_progress", GetEventString(1, "transferState"));
168 EXPECT_EQ(0.0f, GetEventDouble(1, "processed"));
169 EXPECT_EQ(100.0f, GetEventDouble(1, "total"));
170 }
171
172 } // namespace
173 } // namespace file_manager
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/extensions/file_manager/job_event_router.cc ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698