OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 virtual ~ExecuteEvent() {} | 30 virtual ~ExecuteEvent() {} |
31 | 31 |
32 int request_id() { return request_id_; } | 32 int request_id() { return request_id_; } |
33 | 33 |
34 private: | 34 private: |
35 int request_id_; | 35 int request_id_; |
36 }; | 36 }; |
37 | 37 |
38 class SuccessEvent { | 38 class SuccessEvent { |
39 public: | 39 public: |
40 SuccessEvent(int request_id, scoped_ptr<RequestValue> result, bool has_next) | 40 SuccessEvent(int request_id, scoped_ptr<RequestValue> result, bool has_more) |
41 : request_id_(request_id), | 41 : request_id_(request_id), |
42 result_(result.Pass()), | 42 result_(result.Pass()), |
43 has_next_(has_next) {} | 43 has_more_(has_more) {} |
44 virtual ~SuccessEvent() {} | 44 virtual ~SuccessEvent() {} |
45 | 45 |
46 int request_id() { return request_id_; } | 46 int request_id() { return request_id_; } |
47 RequestValue* result() { return result_.get(); } | 47 RequestValue* result() { return result_.get(); } |
48 bool has_next() { return has_next_; } | 48 bool has_more() { return has_more_; } |
49 | 49 |
50 private: | 50 private: |
51 int request_id_; | 51 int request_id_; |
52 scoped_ptr<RequestValue> result_; | 52 scoped_ptr<RequestValue> result_; |
53 bool has_next_; | 53 bool has_more_; |
54 }; | 54 }; |
55 | 55 |
56 class ErrorEvent { | 56 class ErrorEvent { |
57 public: | 57 public: |
58 ErrorEvent(int request_id, base::File::Error error) | 58 ErrorEvent(int request_id, base::File::Error error) |
59 : request_id_(request_id), error_(error) {} | 59 : request_id_(request_id), error_(error) {} |
60 virtual ~ErrorEvent() {} | 60 virtual ~ErrorEvent() {} |
61 | 61 |
62 int request_id() { return request_id_; } | 62 int request_id() { return request_id_; } |
63 base::File::Error error() { return error_; } | 63 base::File::Error error() { return error_; } |
64 | 64 |
65 private: | 65 private: |
66 int request_id_; | 66 int request_id_; |
67 base::File::Error error_; | 67 base::File::Error error_; |
68 }; | 68 }; |
69 | 69 |
70 EventLogger() : weak_ptr_factory_(this) {} | 70 EventLogger() : weak_ptr_factory_(this) {} |
71 virtual ~EventLogger() {} | 71 virtual ~EventLogger() {} |
72 | 72 |
73 void OnExecute(int request_id) { | 73 void OnExecute(int request_id) { |
74 execute_events_.push_back(new ExecuteEvent(request_id)); | 74 execute_events_.push_back(new ExecuteEvent(request_id)); |
75 } | 75 } |
76 | 76 |
77 void OnSuccess(int request_id, | 77 void OnSuccess(int request_id, |
78 scoped_ptr<RequestValue> result, | 78 scoped_ptr<RequestValue> result, |
79 bool has_next) { | 79 bool has_more) { |
80 success_events_.push_back( | 80 success_events_.push_back( |
81 new SuccessEvent(request_id, result.Pass(), has_next)); | 81 new SuccessEvent(request_id, result.Pass(), has_more)); |
82 } | 82 } |
83 | 83 |
84 void OnError(int request_id, base::File::Error error) { | 84 void OnError(int request_id, base::File::Error error) { |
85 error_events_.push_back(new ErrorEvent(request_id, error)); | 85 error_events_.push_back(new ErrorEvent(request_id, error)); |
86 } | 86 } |
87 | 87 |
88 ScopedVector<ExecuteEvent>& execute_events() { return execute_events_; } | 88 ScopedVector<ExecuteEvent>& execute_events() { return execute_events_; } |
89 ScopedVector<SuccessEvent>& success_events() { return success_events_; } | 89 ScopedVector<SuccessEvent>& success_events() { return success_events_; } |
90 ScopedVector<ErrorEvent>& error_events() { return error_events_; } | 90 ScopedVector<ErrorEvent>& error_events() { return error_events_; } |
91 | 91 |
(...skipping 23 matching lines...) Expand all Loading... |
115 virtual bool Execute(int request_id) OVERRIDE { | 115 virtual bool Execute(int request_id) OVERRIDE { |
116 if (logger_.get()) | 116 if (logger_.get()) |
117 logger_->OnExecute(request_id); | 117 logger_->OnExecute(request_id); |
118 | 118 |
119 return execute_reply_; | 119 return execute_reply_; |
120 } | 120 } |
121 | 121 |
122 // RequestManager::Handler overrides. | 122 // RequestManager::Handler overrides. |
123 virtual void OnSuccess(int request_id, | 123 virtual void OnSuccess(int request_id, |
124 scoped_ptr<RequestValue> result, | 124 scoped_ptr<RequestValue> result, |
125 bool has_next) OVERRIDE { | 125 bool has_more) OVERRIDE { |
126 if (logger_.get()) | 126 if (logger_.get()) |
127 logger_->OnSuccess(request_id, result.Pass(), has_next); | 127 logger_->OnSuccess(request_id, result.Pass(), has_more); |
128 } | 128 } |
129 | 129 |
130 // RequestManager::Handler overrides. | 130 // RequestManager::Handler overrides. |
131 virtual void OnError(int request_id, base::File::Error error) OVERRIDE { | 131 virtual void OnError(int request_id, base::File::Error error) OVERRIDE { |
132 if (logger_.get()) | 132 if (logger_.get()) |
133 logger_->OnError(request_id, error); | 133 logger_->OnError(request_id, error); |
134 } | 134 } |
135 | 135 |
136 virtual ~FakeHandler() {} | 136 virtual ~FakeHandler() {} |
137 | 137 |
(...skipping 24 matching lines...) Expand all Loading... |
162 const int request_id = request_manager_->CreateRequest( | 162 const int request_id = request_manager_->CreateRequest( |
163 make_scoped_ptr<RequestManager::HandlerInterface>( | 163 make_scoped_ptr<RequestManager::HandlerInterface>( |
164 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); | 164 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); |
165 | 165 |
166 EXPECT_EQ(1, request_id); | 166 EXPECT_EQ(1, request_id); |
167 EXPECT_EQ(0u, logger.success_events().size()); | 167 EXPECT_EQ(0u, logger.success_events().size()); |
168 EXPECT_EQ(0u, logger.error_events().size()); | 168 EXPECT_EQ(0u, logger.error_events().size()); |
169 | 169 |
170 scoped_ptr<RequestValue> response( | 170 scoped_ptr<RequestValue> response( |
171 RequestValue::CreateForTesting("i-like-vanilla")); | 171 RequestValue::CreateForTesting("i-like-vanilla")); |
172 const bool has_next = false; | 172 const bool has_more = false; |
173 | 173 |
174 bool result = | 174 bool result = |
175 request_manager_->FulfillRequest(request_id, response.Pass(), has_next); | 175 request_manager_->FulfillRequest(request_id, response.Pass(), has_more); |
176 EXPECT_TRUE(result); | 176 EXPECT_TRUE(result); |
177 | 177 |
178 // Validate if the callback has correct arguments. | 178 // Validate if the callback has correct arguments. |
179 ASSERT_EQ(1u, logger.success_events().size()); | 179 ASSERT_EQ(1u, logger.success_events().size()); |
180 EXPECT_EQ(0u, logger.error_events().size()); | 180 EXPECT_EQ(0u, logger.error_events().size()); |
181 EventLogger::SuccessEvent* event = logger.success_events()[0]; | 181 EventLogger::SuccessEvent* event = logger.success_events()[0]; |
182 ASSERT_TRUE(event->result()); | 182 ASSERT_TRUE(event->result()); |
183 const std::string* response_test_string = event->result()->testing_params(); | 183 const std::string* response_test_string = event->result()->testing_params(); |
184 ASSERT_TRUE(response_test_string); | 184 ASSERT_TRUE(response_test_string); |
185 EXPECT_EQ("i-like-vanilla", *response_test_string); | 185 EXPECT_EQ("i-like-vanilla", *response_test_string); |
186 EXPECT_FALSE(event->has_next()); | 186 EXPECT_FALSE(event->has_more()); |
187 | 187 |
188 // Confirm, that the request is removed. Basically, fulfilling again for the | 188 // Confirm, that the request is removed. Basically, fulfilling again for the |
189 // same request, should fail. | 189 // same request, should fail. |
190 { | 190 { |
191 scoped_ptr<RequestValue> response; | 191 scoped_ptr<RequestValue> response; |
192 bool retry = | 192 bool retry = |
193 request_manager_->FulfillRequest(request_id, response.Pass(), has_next); | 193 request_manager_->FulfillRequest(request_id, response.Pass(), has_more); |
194 EXPECT_FALSE(retry); | 194 EXPECT_FALSE(retry); |
195 } | 195 } |
196 | 196 |
197 // Rejecting should also fail. | 197 // Rejecting should also fail. |
198 { | 198 { |
199 bool retry = request_manager_->RejectRequest(request_id, | 199 bool retry = request_manager_->RejectRequest(request_id, |
200 base::File::FILE_ERROR_FAILED); | 200 base::File::FILE_ERROR_FAILED); |
201 EXPECT_FALSE(retry); | 201 EXPECT_FALSE(retry); |
202 } | 202 } |
203 } | 203 } |
204 | 204 |
205 TEST_F(FileSystemProviderRequestManagerTest, CreateAndFulFill_WithHasNext) { | 205 TEST_F(FileSystemProviderRequestManagerTest, CreateAndFulFill_WithHasNext) { |
206 EventLogger logger; | 206 EventLogger logger; |
207 | 207 |
208 const int request_id = request_manager_->CreateRequest( | 208 const int request_id = request_manager_->CreateRequest( |
209 make_scoped_ptr<RequestManager::HandlerInterface>( | 209 make_scoped_ptr<RequestManager::HandlerInterface>( |
210 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); | 210 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); |
211 | 211 |
212 EXPECT_EQ(1, request_id); | 212 EXPECT_EQ(1, request_id); |
213 EXPECT_EQ(0u, logger.success_events().size()); | 213 EXPECT_EQ(0u, logger.success_events().size()); |
214 EXPECT_EQ(0u, logger.error_events().size()); | 214 EXPECT_EQ(0u, logger.error_events().size()); |
215 | 215 |
216 scoped_ptr<RequestValue> response; | 216 scoped_ptr<RequestValue> response; |
217 const bool has_next = true; | 217 const bool has_more = true; |
218 | 218 |
219 bool result = | 219 bool result = |
220 request_manager_->FulfillRequest(request_id, response.Pass(), has_next); | 220 request_manager_->FulfillRequest(request_id, response.Pass(), has_more); |
221 EXPECT_TRUE(result); | 221 EXPECT_TRUE(result); |
222 | 222 |
223 // Validate if the callback has correct arguments. | 223 // Validate if the callback has correct arguments. |
224 ASSERT_EQ(1u, logger.success_events().size()); | 224 ASSERT_EQ(1u, logger.success_events().size()); |
225 EXPECT_EQ(0u, logger.error_events().size()); | 225 EXPECT_EQ(0u, logger.error_events().size()); |
226 EventLogger::SuccessEvent* event = logger.success_events()[0]; | 226 EventLogger::SuccessEvent* event = logger.success_events()[0]; |
227 EXPECT_FALSE(event->result()); | 227 EXPECT_FALSE(event->result()); |
228 EXPECT_TRUE(event->has_next()); | 228 EXPECT_TRUE(event->has_more()); |
229 | 229 |
230 // Confirm, that the request is not removed (since it has has_next == true). | 230 // Confirm, that the request is not removed (since it has has_more == true). |
231 // Basically, fulfilling again for the same request, should not fail. | 231 // Basically, fulfilling again for the same request, should not fail. |
232 { | 232 { |
233 bool new_has_next = false; | 233 bool new_has_more = false; |
234 bool retry = request_manager_->FulfillRequest( | 234 bool retry = request_manager_->FulfillRequest( |
235 request_id, response.Pass(), new_has_next); | 235 request_id, response.Pass(), new_has_more); |
236 EXPECT_TRUE(retry); | 236 EXPECT_TRUE(retry); |
237 } | 237 } |
238 | 238 |
239 // Since |new_has_next| is false, then the request should be removed. To check | 239 // Since |new_has_more| is false, then the request should be removed. To check |
240 // it, try to fulfill again, what should fail. | 240 // it, try to fulfill again, what should fail. |
241 { | 241 { |
242 bool new_has_next = false; | 242 bool new_has_more = false; |
243 bool retry = request_manager_->FulfillRequest( | 243 bool retry = request_manager_->FulfillRequest( |
244 request_id, response.Pass(), new_has_next); | 244 request_id, response.Pass(), new_has_more); |
245 EXPECT_FALSE(retry); | 245 EXPECT_FALSE(retry); |
246 } | 246 } |
247 } | 247 } |
248 | 248 |
249 TEST_F(FileSystemProviderRequestManagerTest, CreateAndReject) { | 249 TEST_F(FileSystemProviderRequestManagerTest, CreateAndReject) { |
250 EventLogger logger; | 250 EventLogger logger; |
251 | 251 |
252 const int request_id = request_manager_->CreateRequest( | 252 const int request_id = request_manager_->CreateRequest( |
253 make_scoped_ptr<RequestManager::HandlerInterface>( | 253 make_scoped_ptr<RequestManager::HandlerInterface>( |
254 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); | 254 new FakeHandler(logger.GetWeakPtr(), true /* execute_reply */))); |
255 | 255 |
256 EXPECT_EQ(1, request_id); | 256 EXPECT_EQ(1, request_id); |
257 EXPECT_EQ(0u, logger.success_events().size()); | 257 EXPECT_EQ(0u, logger.success_events().size()); |
258 EXPECT_EQ(0u, logger.error_events().size()); | 258 EXPECT_EQ(0u, logger.error_events().size()); |
259 | 259 |
260 base::File::Error error = base::File::FILE_ERROR_NO_MEMORY; | 260 base::File::Error error = base::File::FILE_ERROR_NO_MEMORY; |
261 bool result = request_manager_->RejectRequest(request_id, error); | 261 bool result = request_manager_->RejectRequest(request_id, error); |
262 EXPECT_TRUE(result); | 262 EXPECT_TRUE(result); |
263 | 263 |
264 // Validate if the callback has correct arguments. | 264 // Validate if the callback has correct arguments. |
265 ASSERT_EQ(1u, logger.error_events().size()); | 265 ASSERT_EQ(1u, logger.error_events().size()); |
266 EXPECT_EQ(0u, logger.success_events().size()); | 266 EXPECT_EQ(0u, logger.success_events().size()); |
267 EventLogger::ErrorEvent* event = logger.error_events()[0]; | 267 EventLogger::ErrorEvent* event = logger.error_events()[0]; |
268 EXPECT_EQ(error, event->error()); | 268 EXPECT_EQ(error, event->error()); |
269 | 269 |
270 // Confirm, that the request is removed. Basically, fulfilling again for the | 270 // Confirm, that the request is removed. Basically, fulfilling again for the |
271 // same request, should fail. | 271 // same request, should fail. |
272 { | 272 { |
273 scoped_ptr<RequestValue> response; | 273 scoped_ptr<RequestValue> response; |
274 bool has_next = false; | 274 bool has_more = false; |
275 bool retry = | 275 bool retry = |
276 request_manager_->FulfillRequest(request_id, response.Pass(), has_next); | 276 request_manager_->FulfillRequest(request_id, response.Pass(), has_more); |
277 EXPECT_FALSE(retry); | 277 EXPECT_FALSE(retry); |
278 } | 278 } |
279 | 279 |
280 // Rejecting should also fail. | 280 // Rejecting should also fail. |
281 { | 281 { |
282 bool retry = request_manager_->RejectRequest(request_id, error); | 282 bool retry = request_manager_->RejectRequest(request_id, error); |
283 EXPECT_FALSE(retry); | 283 EXPECT_FALSE(retry); |
284 } | 284 } |
285 } | 285 } |
286 | 286 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 // Wait until the request is timeouted. | 388 // Wait until the request is timeouted. |
389 run_loop.RunUntilIdle(); | 389 run_loop.RunUntilIdle(); |
390 | 390 |
391 ASSERT_EQ(1u, logger.error_events().size()); | 391 ASSERT_EQ(1u, logger.error_events().size()); |
392 EventLogger::ErrorEvent* event = logger.error_events()[0]; | 392 EventLogger::ErrorEvent* event = logger.error_events()[0]; |
393 EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error()); | 393 EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error()); |
394 } | 394 } |
395 | 395 |
396 } // namespace file_system_provider | 396 } // namespace file_system_provider |
397 } // namespace chromeos | 397 } // namespace chromeos |
OLD | NEW |