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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_sync_client_unittest.cc

Issue 10546093: gdata: Move ownership of GDataCache to GDataSystemService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add TODO Created 8 years, 6 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 (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/gdata/gdata_sync_client.h" 5 #include "chrome/browser/chromeos/gdata/gdata_sync_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 19 matching lines...) Expand all
30 30
31 // Action used to set mock expectations for GetFileByResourceId(). 31 // Action used to set mock expectations for GetFileByResourceId().
32 ACTION_P4(MockGetFileByResourceId, error, local_path, mime_type, file_type) { 32 ACTION_P4(MockGetFileByResourceId, error, local_path, mime_type, file_type) {
33 arg1.Run(error, local_path, mime_type, file_type); 33 arg1.Run(error, local_path, mime_type, file_type);
34 } 34 }
35 35
36 class GDataSyncClientTest : public testing::Test { 36 class GDataSyncClientTest : public testing::Test {
37 public: 37 public:
38 GDataSyncClientTest() 38 GDataSyncClientTest()
39 : ui_thread_(content::BrowserThread::UI, &message_loop_), 39 : ui_thread_(content::BrowserThread::UI, &message_loop_),
40 io_thread_(content::BrowserThread::IO),
41 sequence_token_(
42 content::BrowserThread::GetBlockingPool()->GetSequenceToken()),
40 profile_(new TestingProfile), 43 profile_(new TestingProfile),
41 mock_file_system_(new MockGDataFileSystem), 44 mock_file_system_(new MockGDataFileSystem),
42 sync_client_(new GDataSyncClient(profile_.get(),
43 mock_file_system_.get())),
44 mock_network_library_(NULL) { 45 mock_network_library_(NULL) {
45 } 46 }
46 47
47 virtual void SetUp() OVERRIDE { 48 virtual void SetUp() OVERRIDE {
48 chromeos::CrosLibrary::Initialize(true /* use_stub */); 49 chromeos::CrosLibrary::Initialize(true /* use_stub */);
49 50
50 // CrosLibrary takes ownership of MockNetworkLibrary. 51 // CrosLibrary takes ownership of MockNetworkLibrary.
51 mock_network_library_ = new chromeos::MockNetworkLibrary; 52 mock_network_library_ = new chromeos::MockNetworkLibrary;
52 chromeos::CrosLibrary::Get()->GetTestApi()->SetNetworkLibrary( 53 chromeos::CrosLibrary::Get()->GetTestApi()->SetNetworkLibrary(
53 mock_network_library_, true); 54 mock_network_library_, true);
55
56 // Create a temporary directory.
57 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
58
59 // Initialize the sync client.
60 cache_.reset(GDataCache::CreateGDataCache(
61 temp_dir_.path(),
62 content::BrowserThread::GetBlockingPool(),
63 sequence_token_).release());
64 sync_client_.reset(new GDataSyncClient(profile_.get(),
65 mock_file_system_.get(),
66 cache_.get()));
67
54 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver( 68 EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(
55 sync_client_.get())).Times(1); 69 sync_client_.get())).Times(1);
56 EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver( 70 EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver(
57 sync_client_.get())).Times(1); 71 sync_client_.get())).Times(1);
58
59 // Create a temporary directory.
60 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
61
62 EXPECT_CALL(*mock_file_system_, AddObserver(sync_client_.get())) 72 EXPECT_CALL(*mock_file_system_, AddObserver(sync_client_.get()))
63 .Times(1); 73 .Times(1);
64 EXPECT_CALL(*mock_file_system_, RemoveObserver(sync_client_.get())) 74 EXPECT_CALL(*mock_file_system_, RemoveObserver(sync_client_.get()))
65 .Times(1); 75 .Times(1);
66 76
67 sync_client_->Initialize(); 77 sync_client_->Initialize();
68 } 78 }
69 79
70 virtual void TearDown() OVERRIDE { 80 virtual void TearDown() OVERRIDE {
71 // The sync client should be deleted before NetworkLibrary, as the sync 81 // The sync client should be deleted before NetworkLibrary, as the sync
72 // client registers itself as observer of NetworkLibrary. 82 // client registers itself as observer of NetworkLibrary.
73 sync_client_.reset(); 83 sync_client_.reset();
74 chromeos::CrosLibrary::Shutdown(); 84 chromeos::CrosLibrary::Shutdown();
85 content::BrowserThread::GetBlockingPool()
86 ->GetSequencedTaskRunner(sequence_token_)->PostTask(
87 FROM_HERE,
88 base::Bind(&base::DeletePointer<GDataCache>, cache_.release()));
89 RunAllPendingForIO();
90 }
91
92 // Used to wait for the result from an operation that involves file IO,
93 // that runs on the blocking pool thread.
94 void RunAllPendingForIO() {
95 // We should first flush tasks on UI thread, as it can require some
96 // tasks to be run before IO tasks start.
97 message_loop_.RunAllPending();
98 content::BrowserThread::GetBlockingPool()->FlushForTesting();
99 // Once IO tasks are done, flush UI thread again so the results from IO
100 // tasks are processed.
101 message_loop_.RunAllPending();
75 } 102 }
76 103
77 // Sets up MockNetworkLibrary as if it's connected to wifi network. 104 // Sets up MockNetworkLibrary as if it's connected to wifi network.
78 void ConnectToWifi() { 105 void ConnectToWifi() {
79 active_network_.reset( 106 active_network_.reset(
80 chromeos::Network::CreateForTesting(chromeos::TYPE_WIFI)); 107 chromeos::Network::CreateForTesting(chromeos::TYPE_WIFI));
81 EXPECT_CALL(*mock_network_library_, active_network()) 108 EXPECT_CALL(*mock_network_library_, active_network())
82 .Times(AnyNumber()) 109 .Times(AnyNumber())
83 .WillRepeatedly((Return(active_network_.get()))); 110 .WillRepeatedly((Return(active_network_.get())));
84 chromeos::Network::TestApi(active_network_.get()).SetConnected(true); 111 chromeos::Network::TestApi(active_network_.get()).SetConnected(true);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 EXPECT_CALL(*mock_network_library_, active_network()) 144 EXPECT_CALL(*mock_network_library_, active_network())
118 .Times(AnyNumber()) 145 .Times(AnyNumber())
119 .WillRepeatedly((Return(active_network_.get()))); 146 .WillRepeatedly((Return(active_network_.get())));
120 // Here false is passed to make it disconnected. 147 // Here false is passed to make it disconnected.
121 chromeos::Network::TestApi(active_network_.get()).SetConnected(false); 148 chromeos::Network::TestApi(active_network_.get()).SetConnected(false);
122 sync_client_->OnNetworkManagerChanged(mock_network_library_); 149 sync_client_->OnNetworkManagerChanged(mock_network_library_);
123 } 150 }
124 151
125 // Sets up test files in the temporary directory. 152 // Sets up test files in the temporary directory.
126 void SetUpTestFiles() { 153 void SetUpTestFiles() {
154 // Create a directory in the temporary directory for pinned files.
155 const FilePath pinned_dir =
156 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_PINNED);
157 ASSERT_TRUE(file_util::CreateDirectory(pinned_dir));
158
127 // Create a symlink in the temporary directory to /dev/null. 159 // Create a symlink in the temporary directory to /dev/null.
128 // We'll collect this resource ID as a file to be fetched. 160 // We'll collect this resource ID as a file to be fetched.
129 ASSERT_TRUE( 161 ASSERT_TRUE(
130 file_util::CreateSymbolicLink( 162 file_util::CreateSymbolicLink(
131 FilePath::FromUTF8Unsafe("/dev/null"), 163 FilePath::FromUTF8Unsafe("/dev/null"),
132 temp_dir_.path().Append("resource_id_not_fetched_foo"))); 164 pinned_dir.Append("resource_id_not_fetched_foo")));
133 // Create some more. 165 // Create some more.
134 ASSERT_TRUE( 166 ASSERT_TRUE(
135 file_util::CreateSymbolicLink( 167 file_util::CreateSymbolicLink(
136 FilePath::FromUTF8Unsafe("/dev/null"), 168 FilePath::FromUTF8Unsafe("/dev/null"),
137 temp_dir_.path().Append("resource_id_not_fetched_bar"))); 169 pinned_dir.Append("resource_id_not_fetched_bar")));
138 ASSERT_TRUE( 170 ASSERT_TRUE(
139 file_util::CreateSymbolicLink( 171 file_util::CreateSymbolicLink(
140 FilePath::FromUTF8Unsafe("/dev/null"), 172 FilePath::FromUTF8Unsafe("/dev/null"),
141 temp_dir_.path().Append("resource_id_not_fetched_baz"))); 173 pinned_dir.Append("resource_id_not_fetched_baz")));
142 174
143 // Create a symlink in the temporary directory to a test file 175 // Create a symlink in the temporary directory to a test file
144 // We won't collect this resource ID, as it already exists. 176 // We won't collect this resource ID, as it already exists.
145 FilePath test_data_dir; 177 FilePath test_data_dir;
146 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); 178 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir));
147 FilePath test_file_path = test_data_dir.AppendASCII("chromeos") 179 FilePath test_file_path = test_data_dir.AppendASCII("chromeos")
148 .AppendASCII("gdata").AppendASCII("testfile.txt"); 180 .AppendASCII("gdata").AppendASCII("testfile.txt");
149 ASSERT_TRUE( 181 ASSERT_TRUE(
150 file_util::CreateSymbolicLink( 182 file_util::CreateSymbolicLink(
151 test_file_path, 183 test_file_path,
152 temp_dir_.path().Append("resource_id_fetched"))); 184 pinned_dir.Append("resource_id_fetched")));
153 } 185 }
154 186
155 // Called when StartInitialScan() is complete. 187 // Called when StartInitialScan() is complete.
156 void OnInitialScanComplete() { 188 void OnInitialScanComplete() {
157 message_loop_.Quit(); 189 message_loop_.Quit();
158 } 190 }
159 191
160 // Sets the expectation for MockGDataFileSystem::GetFileByResourceId(), 192 // Sets the expectation for MockGDataFileSystem::GetFileByResourceId(),
161 // that simulates successful retrieval of a file for the given resource ID. 193 // that simulates successful retrieval of a file for the given resource ID.
162 void SetExpectationForGetFileByResourceId(const std::string& resource_id) { 194 void SetExpectationForGetFileByResourceId(const std::string& resource_id) {
163 EXPECT_CALL(*mock_file_system_, 195 EXPECT_CALL(*mock_file_system_,
164 GetFileByResourceId(resource_id, _, _)) 196 GetFileByResourceId(resource_id, _, _))
165 .WillOnce(MockGetFileByResourceId( 197 .WillOnce(MockGetFileByResourceId(
166 base::PLATFORM_FILE_OK, 198 base::PLATFORM_FILE_OK,
167 FilePath::FromUTF8Unsafe("local_path_does_not_matter"), 199 FilePath::FromUTF8Unsafe("local_path_does_not_matter"),
168 std::string("mime_type_does_not_matter"), 200 std::string("mime_type_does_not_matter"),
169 REGULAR_FILE)); 201 REGULAR_FILE));
170 } 202 }
171 203
172 protected: 204 protected:
173 MessageLoopForUI message_loop_; 205 MessageLoopForUI message_loop_;
174 content::TestBrowserThread ui_thread_; 206 content::TestBrowserThread ui_thread_;
207 content::TestBrowserThread io_thread_;
208 const base::SequencedWorkerPool::SequenceToken sequence_token_;
175 ScopedTempDir temp_dir_; 209 ScopedTempDir temp_dir_;
176 scoped_ptr<TestingProfile> profile_; 210 scoped_ptr<TestingProfile> profile_;
177 scoped_ptr<MockGDataFileSystem> mock_file_system_; 211 scoped_ptr<MockGDataFileSystem> mock_file_system_;
212 scoped_ptr<GDataCache> cache_;
178 scoped_ptr<GDataSyncClient> sync_client_; 213 scoped_ptr<GDataSyncClient> sync_client_;
179 chromeos::MockNetworkLibrary* mock_network_library_; 214 chromeos::MockNetworkLibrary* mock_network_library_;
180 scoped_ptr<chromeos::Network> active_network_; 215 scoped_ptr<chromeos::Network> active_network_;
181 }; 216 };
182 217
183 TEST_F(GDataSyncClientTest, StartInitialScan) { 218 TEST_F(GDataSyncClientTest, StartInitialScan) {
184 SetUpTestFiles(); 219 SetUpTestFiles();
185 220
186 EXPECT_CALL(*mock_file_system_, GetCacheDirectoryPath(
187 GDataCache::CACHE_TYPE_PINNED))
188 .WillOnce(Return(temp_dir_.path()));
189
190 sync_client_->StartInitialScan( 221 sync_client_->StartInitialScan(
191 base::Bind(&GDataSyncClientTest::OnInitialScanComplete, 222 base::Bind(&GDataSyncClientTest::OnInitialScanComplete,
192 base::Unretained(this))); 223 base::Unretained(this)));
193 // Wait until the initial scan is complete. 224 // Wait until the initial scan is complete.
194 message_loop_.Run(); 225 message_loop_.Run();
195 226
196 // Check the contents of the queue. 227 // Check the contents of the queue.
197 const std::deque<std::string>& resource_ids = 228 const std::deque<std::string>& resource_ids =
198 sync_client_->GetResourceIdsForTesting(); 229 sync_client_->GetResourceIdsForTesting();
199 ASSERT_EQ(3U, resource_ids.size()); 230 ASSERT_EQ(3U, resource_ids.size());
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 ASSERT_EQ(1U, resource_ids.size()); 420 ASSERT_EQ(1U, resource_ids.size());
390 EXPECT_EQ("resource_id_not_fetched_baz", resource_ids[1]); 421 EXPECT_EQ("resource_id_not_fetched_baz", resource_ids[1]);
391 422
392 sync_client_->OnFileUnpinned("resource_id_not_fetched_baz", "md5"); 423 sync_client_->OnFileUnpinned("resource_id_not_fetched_baz", "md5");
393 // "baz" should be gone. 424 // "baz" should be gone.
394 resource_ids = sync_client_->GetResourceIdsForTesting(); 425 resource_ids = sync_client_->GetResourceIdsForTesting();
395 ASSERT_TRUE(resource_ids.empty()); 426 ASSERT_TRUE(resource_ids.empty());
396 } 427 }
397 428
398 } // namespace gdata 429 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_sync_client.cc ('k') | chrome/browser/chromeos/gdata/gdata_system_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698