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

Side by Side Diff: chrome/browser/chromeos/file_system_provider/request_manager_unittest.cc

Issue 241673005: [fsp] Initial implementation of timeout logic for requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
OLDNEW
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/files/file.h" 9 #include "base/files/file.h"
9 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
10 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
12 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/run_loop.h"
13 #include "base/values.h" 15 #include "base/values.h"
14 #include "chrome/browser/chromeos/file_system_provider/request_manager.h" 16 #include "chrome/browser/chromeos/file_system_provider/request_manager.h"
17 #include "content/public/test/test_browser_thread_bundle.h"
15 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
16 19
17 namespace chromeos { 20 namespace chromeos {
18 namespace file_system_provider { 21 namespace file_system_provider {
19 namespace { 22 namespace {
20 23
21 // Logs calls of the success and error callbacks on requests. 24 // Logs calls of the success and error callbacks on requests.
22 class EventLogger { 25 class EventLogger {
23 public: 26 public:
24 class SuccessEvent { 27 class SuccessEvent {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 base::WeakPtr<EventLogger> GetWeakPtr() { 66 base::WeakPtr<EventLogger> GetWeakPtr() {
64 return weak_ptr_factory_.GetWeakPtr(); 67 return weak_ptr_factory_.GetWeakPtr();
65 } 68 }
66 69
67 private: 70 private:
68 ScopedVector<SuccessEvent> success_events_; 71 ScopedVector<SuccessEvent> success_events_;
69 ScopedVector<ErrorEvent> error_events_; 72 ScopedVector<ErrorEvent> error_events_;
70 base::WeakPtrFactory<EventLogger> weak_ptr_factory_; 73 base::WeakPtrFactory<EventLogger> weak_ptr_factory_;
71 }; 74 };
72 75
76 // Handles a request error due to a timeout. Registers the call in the logger
77 // via |logger_callback| and quits a RunLoop instance with the |quit_closure|.
78 void OnRequestTimeout(base::Callback<void(base::File::Error)> logger_callback,
79 base::Closure quit_closure,
80 base::File::Error error) {
81 logger_callback.Run(error);
82 quit_closure.Run();
83 }
84
73 } // namespace 85 } // namespace
74 86
75 class FileSystemProviderRequestManagerTest : public testing::Test { 87 class FileSystemProviderRequestManagerTest : public testing::Test {
76 protected: 88 protected:
77 FileSystemProviderRequestManagerTest() {} 89 FileSystemProviderRequestManagerTest() {}
78 virtual ~FileSystemProviderRequestManagerTest() {} 90 virtual ~FileSystemProviderRequestManagerTest() {}
79 91
80 virtual void SetUp() OVERRIDE { 92 virtual void SetUp() OVERRIDE {
81 request_manager_.reset(new RequestManager()); 93 request_manager_.reset(new RequestManager());
82 } 94 }
83 95
96 content::TestBrowserThreadBundle thread_bundle_;
84 scoped_ptr<RequestManager> request_manager_; 97 scoped_ptr<RequestManager> request_manager_;
85 }; 98 };
86 99
87 TEST_F(FileSystemProviderRequestManagerTest, CreateAndFulFill) { 100 TEST_F(FileSystemProviderRequestManagerTest, CreateAndFulFill) {
88 EventLogger logger; 101 EventLogger logger;
89 102
90 int request_id = request_manager_->CreateRequest( 103 int request_id = request_manager_->CreateRequest(
91 base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()), 104 base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
92 base::Bind(&EventLogger::OnError, logger.GetWeakPtr())); 105 base::Bind(&EventLogger::OnError, logger.GetWeakPtr()));
93 106
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 } 309 }
297 310
298 // All active requests should be aborted in the destructor of RequestManager. 311 // All active requests should be aborted in the destructor of RequestManager.
299 EventLogger::ErrorEvent* event = logger.error_events()[0]; 312 EventLogger::ErrorEvent* event = logger.error_events()[0];
300 ASSERT_EQ(1u, logger.error_events().size()); 313 ASSERT_EQ(1u, logger.error_events().size());
301 EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error()); 314 EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error());
302 315
303 EXPECT_EQ(0u, logger.success_events().size()); 316 EXPECT_EQ(0u, logger.success_events().size());
304 } 317 }
305 318
319 TEST_F(FileSystemProviderRequestManagerTest, AbortOnTimeout) {
320 EventLogger logger;
321 base::RunLoop run_loop;
322
323 request_manager_->SetTimeoutForTests(100);
hashimoto 2014/04/18 05:28:09 Can't we use 0 as the timeout? Then you can use Ru
mtomasz 2014/04/18 05:56:18 Good idea. Done.
324 int request_id = request_manager_->CreateRequest(
325 base::Bind(&EventLogger::OnSuccess, logger.GetWeakPtr()),
326 base::Bind(&OnRequestTimeout,
327 base::Bind(&EventLogger::OnError, logger.GetWeakPtr()),
328 run_loop.QuitClosure()));
329 EXPECT_LT(0, request_id);
330
331 // Wait until the request is timeouted. Note, that the entire test case will
332 // timeout if the request never timeouts.
333 run_loop.Run();
334
335 ASSERT_EQ(1u, logger.error_events().size());
336 EventLogger::ErrorEvent* event = logger.error_events()[0];
337 EXPECT_EQ(base::File::FILE_ERROR_ABORT, event->error());
338 }
339
306 } // namespace file_system_provider 340 } // namespace file_system_provider
307 } // namespace chromeos 341 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698