| 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 |