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

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

Issue 10877005: Rename GDataCache* to DriveCache* (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase. Created 8 years, 4 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 <algorithm> 5 #include <algorithm>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/threading/sequenced_worker_pool.h" 11 #include "base/threading/sequenced_worker_pool.h"
12 #include "chrome/browser/chromeos/gdata/drive.pb.h" 12 #include "chrome/browser/chromeos/gdata/drive.pb.h"
13 #include "chrome/browser/chromeos/gdata/gdata_cache.h" 13 #include "chrome/browser/chromeos/gdata/drive_cache.h"
14 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" 14 #include "chrome/browser/chromeos/gdata/gdata_file_system.h"
15 #include "chrome/browser/chromeos/gdata/gdata_test_util.h" 15 #include "chrome/browser/chromeos/gdata/gdata_test_util.h"
16 #include "chrome/browser/chromeos/gdata/gdata_util.h" 16 #include "chrome/browser/chromeos/gdata/gdata_util.h"
17 #include "chrome/browser/chromeos/gdata/mock_gdata_cache_observer.h" 17 #include "chrome/browser/chromeos/gdata/mock_drive_cache_observer.h"
18 #include "chrome/common/chrome_paths.h" 18 #include "chrome/common/chrome_paths.h"
19 #include "chrome/test/base/testing_profile.h" 19 #include "chrome/test/base/testing_profile.h"
20 #include "content/public/test/test_browser_thread.h" 20 #include "content/public/test/test_browser_thread.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 using ::testing::AtLeast; 24 using ::testing::AtLeast;
25 using ::testing::Return; 25 using ::testing::Return;
26 using ::testing::StrictMock; 26 using ::testing::StrictMock;
27 27
28 namespace gdata { 28 namespace gdata {
29 namespace { 29 namespace {
30 30
31 const char kSymLinkToDevNull[] = "/dev/null"; 31 const char kSymLinkToDevNull[] = "/dev/null";
32 32
33 struct InitialCacheResource { 33 struct InitialCacheResource {
34 const char* source_file; // Source file to be used for cache. 34 const char* source_file; // Source file to be used for cache.
35 const char* resource_id; // Resource id of cache file. 35 const char* resource_id; // Resource id of cache file.
36 const char* md5; // MD5 of cache file. 36 const char* md5; // MD5 of cache file.
37 int cache_state; // Cache state of cache file. 37 int cache_state; // Cache state of cache file.
38 const char* expected_file_extension; // Expected extension of cached file. 38 const char* expected_file_extension; // Expected extension of cached file.
39 // Expected CacheSubDirectoryType of cached file. 39 // Expected CacheSubDirectoryType of cached file.
40 GDataCache::CacheSubDirectoryType expected_sub_dir_type; 40 DriveCache::CacheSubDirectoryType expected_sub_dir_type;
41 } const initial_cache_resources[] = { 41 } const initial_cache_resources[] = {
42 // Cache resource in tmp dir, i.e. not pinned or dirty. 42 // Cache resource in tmp dir, i.e. not pinned or dirty.
43 { "root_feed.json", "tmp:resource_id", "md5_tmp_alphanumeric", 43 { "root_feed.json", "tmp:resource_id", "md5_tmp_alphanumeric",
44 test_util::TEST_CACHE_STATE_PRESENT, 44 test_util::TEST_CACHE_STATE_PRESENT,
45 "md5_tmp_alphanumeric", GDataCache::CACHE_TYPE_TMP }, 45 "md5_tmp_alphanumeric", DriveCache::CACHE_TYPE_TMP },
46 // Cache resource in tmp dir, i.e. not pinned or dirty, with resource_id 46 // Cache resource in tmp dir, i.e. not pinned or dirty, with resource_id
47 // containing non-alphanumeric characters, to test resource_id is escaped and 47 // containing non-alphanumeric characters, to test resource_id is escaped and
48 // unescaped correctly. 48 // unescaped correctly.
49 { "subdir_feed.json", "tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", 49 { "subdir_feed.json", "tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?",
50 "md5_tmp_non_alphanumeric", 50 "md5_tmp_non_alphanumeric",
51 test_util::TEST_CACHE_STATE_PRESENT, 51 test_util::TEST_CACHE_STATE_PRESENT,
52 "md5_tmp_non_alphanumeric", GDataCache::CACHE_TYPE_TMP }, 52 "md5_tmp_non_alphanumeric", DriveCache::CACHE_TYPE_TMP },
53 // Cache resource that is pinned, to test a pinned file is in persistent dir 53 // Cache resource that is pinned, to test a pinned file is in persistent dir
54 // with a symlink in pinned dir referencing it. 54 // with a symlink in pinned dir referencing it.
55 { "directory_entry_atom.json", "pinned:existing", "md5_pinned_existing", 55 { "directory_entry_atom.json", "pinned:existing", "md5_pinned_existing",
56 test_util::TEST_CACHE_STATE_PRESENT | 56 test_util::TEST_CACHE_STATE_PRESENT |
57 test_util::TEST_CACHE_STATE_PINNED | 57 test_util::TEST_CACHE_STATE_PINNED |
58 test_util::TEST_CACHE_STATE_PERSISTENT, 58 test_util::TEST_CACHE_STATE_PERSISTENT,
59 "md5_pinned_existing", GDataCache::CACHE_TYPE_PERSISTENT }, 59 "md5_pinned_existing", DriveCache::CACHE_TYPE_PERSISTENT },
60 // Cache resource with a non-existent source file that is pinned, to test that 60 // Cache resource with a non-existent source file that is pinned, to test that
61 // a pinned file can reference a non-existent file. 61 // a pinned file can reference a non-existent file.
62 { "", "pinned:non-existent", "md5_pinned_non_existent", 62 { "", "pinned:non-existent", "md5_pinned_non_existent",
63 test_util::TEST_CACHE_STATE_PINNED, 63 test_util::TEST_CACHE_STATE_PINNED,
64 "md5_pinned_non_existent", GDataCache::CACHE_TYPE_TMP }, 64 "md5_pinned_non_existent", DriveCache::CACHE_TYPE_TMP },
65 // Cache resource that is dirty, to test a dirty file is in persistent dir 65 // Cache resource that is dirty, to test a dirty file is in persistent dir
66 // with a symlink in outgoing dir referencing it. 66 // with a symlink in outgoing dir referencing it.
67 { "account_metadata.json", "dirty:existing", "md5_dirty_existing", 67 { "account_metadata.json", "dirty:existing", "md5_dirty_existing",
68 test_util::TEST_CACHE_STATE_PRESENT | 68 test_util::TEST_CACHE_STATE_PRESENT |
69 test_util::TEST_CACHE_STATE_DIRTY | 69 test_util::TEST_CACHE_STATE_DIRTY |
70 test_util::TEST_CACHE_STATE_PERSISTENT, 70 test_util::TEST_CACHE_STATE_PERSISTENT,
71 "local", GDataCache::CACHE_TYPE_PERSISTENT }, 71 "local", DriveCache::CACHE_TYPE_PERSISTENT },
72 // Cache resource that is pinned and dirty, to test a dirty pinned file is in 72 // Cache resource that is pinned and dirty, to test a dirty pinned file is in
73 // persistent dir with symlink in pinned and outgoing dirs referencing it. 73 // persistent dir with symlink in pinned and outgoing dirs referencing it.
74 { "basic_feed.json", "dirty_and_pinned:existing", 74 { "basic_feed.json", "dirty_and_pinned:existing",
75 "md5_dirty_and_pinned_existing", 75 "md5_dirty_and_pinned_existing",
76 test_util::TEST_CACHE_STATE_PRESENT | 76 test_util::TEST_CACHE_STATE_PRESENT |
77 test_util::TEST_CACHE_STATE_PINNED | 77 test_util::TEST_CACHE_STATE_PINNED |
78 test_util::TEST_CACHE_STATE_DIRTY | 78 test_util::TEST_CACHE_STATE_DIRTY |
79 test_util::TEST_CACHE_STATE_PERSISTENT, 79 test_util::TEST_CACHE_STATE_PERSISTENT,
80 "local", GDataCache::CACHE_TYPE_PERSISTENT }, 80 "local", DriveCache::CACHE_TYPE_PERSISTENT },
81 }; 81 };
82 82
83 const int64 kLotsOfSpace = kMinFreeSpace * 10; 83 const int64 kLotsOfSpace = kMinFreeSpace * 10;
84 84
85 struct PathToVerify { 85 struct PathToVerify {
86 PathToVerify(const FilePath& in_path_to_scan, 86 PathToVerify(const FilePath& in_path_to_scan,
87 const FilePath& in_expected_existing_path) : 87 const FilePath& in_expected_existing_path) :
88 path_to_scan(in_path_to_scan), 88 path_to_scan(in_path_to_scan),
89 expected_existing_path(in_expected_existing_path) { 89 expected_existing_path(in_expected_existing_path) {
90 } 90 }
(...skipping 27 matching lines...) Expand all
118 void OnClearAll(GDataFileError* out_error, 118 void OnClearAll(GDataFileError* out_error,
119 FilePath* out_file_path, 119 FilePath* out_file_path,
120 GDataFileError error, 120 GDataFileError error,
121 const FilePath& file_path) { 121 const FilePath& file_path) {
122 *out_file_path = file_path; 122 *out_file_path = file_path;
123 *out_error = error; 123 *out_error = error;
124 } 124 }
125 125
126 } // namespace 126 } // namespace
127 127
128 class GDataCacheTest : public testing::Test { 128 class DriveCacheTest : public testing::Test {
129 protected: 129 protected:
130 GDataCacheTest() 130 DriveCacheTest()
131 : ui_thread_(content::BrowserThread::UI, &message_loop_), 131 : ui_thread_(content::BrowserThread::UI, &message_loop_),
132 io_thread_(content::BrowserThread::IO), 132 io_thread_(content::BrowserThread::IO),
133 cache_(NULL), 133 cache_(NULL),
134 num_callback_invocations_(0), 134 num_callback_invocations_(0),
135 expected_error_(GDATA_FILE_OK), 135 expected_error_(GDATA_FILE_OK),
136 expected_cache_state_(0), 136 expected_cache_state_(0),
137 expected_sub_dir_type_(GDataCache::CACHE_TYPE_META), 137 expected_sub_dir_type_(DriveCache::CACHE_TYPE_META),
138 expected_success_(true), 138 expected_success_(true),
139 expect_outgoing_symlink_(false), 139 expect_outgoing_symlink_(false),
140 root_feed_changestamp_(0) { 140 root_feed_changestamp_(0) {
141 } 141 }
142 142
143 virtual void SetUp() OVERRIDE { 143 virtual void SetUp() OVERRIDE {
144 io_thread_.StartIOThread(); 144 io_thread_.StartIOThread();
145 145
146 profile_.reset(new TestingProfile); 146 profile_.reset(new TestingProfile);
147 147
148 mock_free_disk_space_checker_ = new MockFreeDiskSpaceGetter; 148 mock_free_disk_space_checker_ = new MockFreeDiskSpaceGetter;
149 SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_); 149 SetFreeDiskSpaceGetterForTesting(mock_free_disk_space_checker_);
150 150
151 scoped_refptr<base::SequencedWorkerPool> pool = 151 scoped_refptr<base::SequencedWorkerPool> pool =
152 content::BrowserThread::GetBlockingPool(); 152 content::BrowserThread::GetBlockingPool();
153 blocking_task_runner_ = 153 blocking_task_runner_ =
154 pool->GetSequencedTaskRunner(pool->GetSequenceToken()); 154 pool->GetSequencedTaskRunner(pool->GetSequenceToken());
155 cache_ = GDataCache::CreateGDataCacheOnUIThread( 155 cache_ = DriveCache::CreateDriveCacheOnUIThread(
156 GDataCache::GetCacheRootPath(profile_.get()), blocking_task_runner_); 156 DriveCache::GetCacheRootPath(profile_.get()), blocking_task_runner_);
157 157
158 mock_cache_observer_.reset(new StrictMock<MockGDataCacheObserver>); 158 mock_cache_observer_.reset(new StrictMock<MockDriveCacheObserver>);
159 cache_->AddObserver(mock_cache_observer_.get()); 159 cache_->AddObserver(mock_cache_observer_.get());
160 160
161 cache_->RequestInitializeOnUIThread(); 161 cache_->RequestInitializeOnUIThread();
162 test_util::RunBlockingPoolTask(); 162 test_util::RunBlockingPoolTask();
163 } 163 }
164 164
165 virtual void TearDown() OVERRIDE { 165 virtual void TearDown() OVERRIDE {
166 SetFreeDiskSpaceGetterForTesting(NULL); 166 SetFreeDiskSpaceGetterForTesting(NULL);
167 cache_->DestroyOnUIThread(); 167 cache_->DestroyOnUIThread();
168 // The cache destruction requires to post a task to the blocking pool. 168 // The cache destruction requires to post a task to the blocking pool.
169 test_util::RunBlockingPoolTask(); 169 test_util::RunBlockingPoolTask();
170 170
171 profile_.reset(NULL); 171 profile_.reset(NULL);
172 } 172 }
173 173
174 void PrepareForInitCacheTest() { 174 void PrepareForInitCacheTest() {
175 DVLOG(1) << "PrepareForInitCacheTest start"; 175 DVLOG(1) << "PrepareForInitCacheTest start";
176 // Create gdata cache sub directories. 176 // Create gdata cache sub directories.
177 ASSERT_TRUE(file_util::CreateDirectory( 177 ASSERT_TRUE(file_util::CreateDirectory(
178 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_PERSISTENT))); 178 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PERSISTENT)));
179 ASSERT_TRUE(file_util::CreateDirectory( 179 ASSERT_TRUE(file_util::CreateDirectory(
180 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_TMP))); 180 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_TMP)));
181 ASSERT_TRUE(file_util::CreateDirectory( 181 ASSERT_TRUE(file_util::CreateDirectory(
182 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_PINNED))); 182 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PINNED)));
183 ASSERT_TRUE(file_util::CreateDirectory( 183 ASSERT_TRUE(file_util::CreateDirectory(
184 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_OUTGOING))); 184 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_OUTGOING)));
185 185
186 // Dump some files into cache dirs so that 186 // Dump some files into cache dirs so that
187 // GDataFileSystem::InitializeCacheOnBlockingPool would scan through them 187 // GDataFileSystem::InitializeCacheOnBlockingPool would scan through them
188 // and populate cache map accordingly. 188 // and populate cache map accordingly.
189 189
190 // Copy files from data dir to cache dir to act as cached files. 190 // Copy files from data dir to cache dir to act as cached files.
191 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) { 191 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) {
192 const struct InitialCacheResource& resource = initial_cache_resources[i]; 192 const struct InitialCacheResource& resource = initial_cache_resources[i];
193 // Determine gdata cache file absolute path according to cache state. 193 // Determine gdata cache file absolute path according to cache state.
194 FilePath dest_path = cache_->GetCacheFilePath( 194 FilePath dest_path = cache_->GetCacheFilePath(
195 resource.resource_id, 195 resource.resource_id,
196 resource.md5, 196 resource.md5,
197 test_util::ToCacheEntry(resource.cache_state).is_pinned() || 197 test_util::ToCacheEntry(resource.cache_state).is_pinned() ||
198 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? 198 test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
199 GDataCache::CACHE_TYPE_PERSISTENT : 199 DriveCache::CACHE_TYPE_PERSISTENT :
200 GDataCache::CACHE_TYPE_TMP, 200 DriveCache::CACHE_TYPE_TMP,
201 test_util::ToCacheEntry(resource.cache_state).is_dirty() ? 201 test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
202 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : 202 DriveCache::CACHED_FILE_LOCALLY_MODIFIED :
203 GDataCache::CACHED_FILE_FROM_SERVER); 203 DriveCache::CACHED_FILE_FROM_SERVER);
204 204
205 // Copy file from data dir to cache subdir, naming it per cache files 205 // Copy file from data dir to cache subdir, naming it per cache files
206 // convention. 206 // convention.
207 if (test_util::ToCacheEntry(resource.cache_state).is_present()) { 207 if (test_util::ToCacheEntry(resource.cache_state).is_present()) {
208 FilePath source_path = GetTestFilePath(resource.source_file); 208 FilePath source_path = GetTestFilePath(resource.source_file);
209 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); 209 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path));
210 } else { 210 } else {
211 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull)); 211 dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull));
212 } 212 }
213 213
214 // Create symbolic link in pinned dir, naming it per cache files 214 // Create symbolic link in pinned dir, naming it per cache files
215 // convention. 215 // convention.
216 if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) { 216 if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) {
217 FilePath link_path = cache_->GetCacheFilePath( 217 FilePath link_path = cache_->GetCacheFilePath(
218 resource.resource_id, 218 resource.resource_id,
219 "", 219 "",
220 GDataCache::CACHE_TYPE_PINNED, 220 DriveCache::CACHE_TYPE_PINNED,
221 GDataCache::CACHED_FILE_FROM_SERVER); 221 DriveCache::CACHED_FILE_FROM_SERVER);
222 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); 222 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path));
223 } 223 }
224 224
225 // Create symbolic link in outgoing dir, naming it per cache files 225 // Create symbolic link in outgoing dir, naming it per cache files
226 // convention. 226 // convention.
227 if (test_util::ToCacheEntry(resource.cache_state).is_dirty()) { 227 if (test_util::ToCacheEntry(resource.cache_state).is_dirty()) {
228 FilePath link_path = cache_->GetCacheFilePath( 228 FilePath link_path = cache_->GetCacheFilePath(
229 resource.resource_id, 229 resource.resource_id,
230 "", 230 "",
231 GDataCache::CACHE_TYPE_OUTGOING, 231 DriveCache::CACHE_TYPE_OUTGOING,
232 GDataCache::CACHED_FILE_FROM_SERVER); 232 DriveCache::CACHED_FILE_FROM_SERVER);
233 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path)); 233 ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path));
234 } 234 }
235 } 235 }
236 236
237 DVLOG(1) << "PrepareForInitCacheTest finished"; 237 DVLOG(1) << "PrepareForInitCacheTest finished";
238 cache_->ForceRescanOnUIThreadForTesting(); 238 cache_->ForceRescanOnUIThreadForTesting();
239 test_util::RunBlockingPoolTask(); 239 test_util::RunBlockingPoolTask();
240 } 240 }
241 241
242 void TestInitializeCache() { 242 void TestInitializeCache() {
(...skipping 14 matching lines...) Expand all
257 std::string md5; 257 std::string md5;
258 if (test_util::ToCacheEntry(resource.cache_state).is_present()) 258 if (test_util::ToCacheEntry(resource.cache_state).is_present())
259 md5 = resource.md5; 259 md5 = resource.md5;
260 DriveCacheEntry cache_entry; 260 DriveCacheEntry cache_entry;
261 ASSERT_TRUE(GetCacheEntryFromOriginThread( 261 ASSERT_TRUE(GetCacheEntryFromOriginThread(
262 resource.resource_id, md5, &cache_entry)); 262 resource.resource_id, md5, &cache_entry));
263 EXPECT_TRUE(test_util::CacheStatesEqual( 263 EXPECT_TRUE(test_util::CacheStatesEqual(
264 test_util::ToCacheEntry(resource.cache_state), 264 test_util::ToCacheEntry(resource.cache_state),
265 cache_entry)); 265 cache_entry));
266 EXPECT_EQ(resource.expected_sub_dir_type, 266 EXPECT_EQ(resource.expected_sub_dir_type,
267 GDataCache::GetSubDirectoryType(cache_entry)); 267 DriveCache::GetSubDirectoryType(cache_entry));
268 } 268 }
269 } 269 }
270 270
271 void TestGetFileFromCacheByResourceIdAndMd5( 271 void TestGetFileFromCacheByResourceIdAndMd5(
272 const std::string& resource_id, 272 const std::string& resource_id,
273 const std::string& md5, 273 const std::string& md5,
274 GDataFileError expected_error, 274 GDataFileError expected_error,
275 const std::string& expected_file_extension) { 275 const std::string& expected_file_extension) {
276 expected_error_ = expected_error; 276 expected_error_ = expected_error;
277 expected_file_extension_ = expected_file_extension; 277 expected_file_extension_ = expected_file_extension;
278 278
279 cache_->GetFileOnUIThread( 279 cache_->GetFileOnUIThread(
280 resource_id, md5, 280 resource_id, md5,
281 base::Bind(&GDataCacheTest::VerifyGetFromCache, 281 base::Bind(&DriveCacheTest::VerifyGetFromCache,
282 base::Unretained(this))); 282 base::Unretained(this)));
283 283
284 test_util::RunBlockingPoolTask(); 284 test_util::RunBlockingPoolTask();
285 } 285 }
286 286
287 void TestStoreToCache( 287 void TestStoreToCache(
288 const std::string& resource_id, 288 const std::string& resource_id,
289 const std::string& md5, 289 const std::string& md5,
290 const FilePath& source_path, 290 const FilePath& source_path,
291 GDataFileError expected_error, 291 GDataFileError expected_error,
292 int expected_cache_state, 292 int expected_cache_state,
293 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 293 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
294 expected_error_ = expected_error; 294 expected_error_ = expected_error;
295 expected_cache_state_ = expected_cache_state; 295 expected_cache_state_ = expected_cache_state;
296 expected_sub_dir_type_ = expected_sub_dir_type; 296 expected_sub_dir_type_ = expected_sub_dir_type;
297 297
298 cache_->StoreOnUIThread( 298 cache_->StoreOnUIThread(
299 resource_id, md5, source_path, 299 resource_id, md5, source_path,
300 GDataCache::FILE_OPERATION_COPY, 300 DriveCache::FILE_OPERATION_COPY,
301 base::Bind(&GDataCacheTest::VerifyCacheFileState, 301 base::Bind(&DriveCacheTest::VerifyCacheFileState,
302 base::Unretained(this))); 302 base::Unretained(this)));
303 303
304 test_util::RunBlockingPoolTask(); 304 test_util::RunBlockingPoolTask();
305 } 305 }
306 306
307 void VerifyGetFromCache(GDataFileError error, 307 void VerifyGetFromCache(GDataFileError error,
308 const std::string& resource_id, 308 const std::string& resource_id,
309 const std::string& md5, 309 const std::string& md5,
310 const FilePath& cache_file_path) { 310 const FilePath& cache_file_path) {
311 ++num_callback_invocations_; 311 ++num_callback_invocations_;
(...skipping 13 matching lines...) Expand all
325 EXPECT_TRUE(cache_file_path.empty()); 325 EXPECT_TRUE(cache_file_path.empty());
326 } 326 }
327 } 327 }
328 328
329 void TestRemoveFromCache(const std::string& resource_id, 329 void TestRemoveFromCache(const std::string& resource_id,
330 GDataFileError expected_error) { 330 GDataFileError expected_error) {
331 expected_error_ = expected_error; 331 expected_error_ = expected_error;
332 332
333 cache_->RemoveOnUIThread( 333 cache_->RemoveOnUIThread(
334 resource_id, 334 resource_id,
335 base::Bind(&GDataCacheTest::VerifyRemoveFromCache, 335 base::Bind(&DriveCacheTest::VerifyRemoveFromCache,
336 base::Unretained(this))); 336 base::Unretained(this)));
337 337
338 test_util::RunBlockingPoolTask(); 338 test_util::RunBlockingPoolTask();
339 } 339 }
340 340
341 void VerifyRemoveFromCache(GDataFileError error, 341 void VerifyRemoveFromCache(GDataFileError error,
342 const std::string& resource_id, 342 const std::string& resource_id,
343 const std::string& md5) { 343 const std::string& md5) {
344 ++num_callback_invocations_; 344 ++num_callback_invocations_;
345 345
346 EXPECT_EQ(expected_error_, error); 346 EXPECT_EQ(expected_error_, error);
347 347
348 // Verify cache map. 348 // Verify cache map.
349 DriveCacheEntry cache_entry; 349 DriveCacheEntry cache_entry;
350 const bool cache_entry_found = 350 const bool cache_entry_found =
351 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); 351 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry);
352 if (cache_entry_found) 352 if (cache_entry_found)
353 EXPECT_TRUE(cache_entry.is_dirty()); 353 EXPECT_TRUE(cache_entry.is_dirty());
354 354
355 // If entry doesn't exist, verify that: 355 // If entry doesn't exist, verify that:
356 // - no files with "<resource_id>.* exists in persistent and tmp dirs 356 // - no files with "<resource_id>.* exists in persistent and tmp dirs
357 // - no "<resource_id>" symlink exists in pinned and outgoing dirs. 357 // - no "<resource_id>" symlink exists in pinned and outgoing dirs.
358 std::vector<PathToVerify> paths_to_verify; 358 std::vector<PathToVerify> paths_to_verify;
359 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP. 359 paths_to_verify.push_back( // Index 0: CACHE_TYPE_TMP.
360 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", 360 PathToVerify(cache_->GetCacheFilePath(resource_id, "*",
361 GDataCache::CACHE_TYPE_TMP, 361 DriveCache::CACHE_TYPE_TMP,
362 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); 362 DriveCache::CACHED_FILE_FROM_SERVER), FilePath()));
363 paths_to_verify.push_back( // Index 1: CACHE_TYPE_PERSISTENT. 363 paths_to_verify.push_back( // Index 1: CACHE_TYPE_PERSISTENT.
364 PathToVerify(cache_->GetCacheFilePath(resource_id, "*", 364 PathToVerify(cache_->GetCacheFilePath(resource_id, "*",
365 GDataCache::CACHE_TYPE_PERSISTENT, 365 DriveCache::CACHE_TYPE_PERSISTENT,
366 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); 366 DriveCache::CACHED_FILE_FROM_SERVER), FilePath()));
367 paths_to_verify.push_back( // Index 2: CACHE_TYPE_TMP, but STATE_PINNED. 367 paths_to_verify.push_back( // Index 2: CACHE_TYPE_TMP, but STATE_PINNED.
368 PathToVerify(cache_->GetCacheFilePath(resource_id, "", 368 PathToVerify(cache_->GetCacheFilePath(resource_id, "",
369 GDataCache::CACHE_TYPE_PINNED, 369 DriveCache::CACHE_TYPE_PINNED,
370 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); 370 DriveCache::CACHED_FILE_FROM_SERVER), FilePath()));
371 paths_to_verify.push_back( // Index 3: CACHE_TYPE_OUTGOING. 371 paths_to_verify.push_back( // Index 3: CACHE_TYPE_OUTGOING.
372 PathToVerify(cache_->GetCacheFilePath(resource_id, "", 372 PathToVerify(cache_->GetCacheFilePath(resource_id, "",
373 GDataCache::CACHE_TYPE_OUTGOING, 373 DriveCache::CACHE_TYPE_OUTGOING,
374 GDataCache::CACHED_FILE_FROM_SERVER), FilePath())); 374 DriveCache::CACHED_FILE_FROM_SERVER), FilePath()));
375 if (!cache_entry_found) { 375 if (!cache_entry_found) {
376 for (size_t i = 0; i < paths_to_verify.size(); ++i) { 376 for (size_t i = 0; i < paths_to_verify.size(); ++i) {
377 file_util::FileEnumerator enumerator( 377 file_util::FileEnumerator enumerator(
378 paths_to_verify[i].path_to_scan.DirName(), false /* not recursive*/, 378 paths_to_verify[i].path_to_scan.DirName(), false /* not recursive*/,
379 file_util::FileEnumerator::FILES | 379 file_util::FileEnumerator::FILES |
380 file_util::FileEnumerator::SHOW_SYM_LINKS, 380 file_util::FileEnumerator::SHOW_SYM_LINKS,
381 paths_to_verify[i].path_to_scan.BaseName().value()); 381 paths_to_verify[i].path_to_scan.BaseName().value());
382 EXPECT_TRUE(enumerator.Next().empty()); 382 EXPECT_TRUE(enumerator.Next().empty());
383 } 383 }
384 } else { 384 } else {
385 // Entry is dirty, verify that: 385 // Entry is dirty, verify that:
386 // - no files with "<resource_id>.*" exist in tmp dir 386 // - no files with "<resource_id>.*" exist in tmp dir
387 // - only 1 "<resource_id>.local" exists in persistent dir 387 // - only 1 "<resource_id>.local" exists in persistent dir
388 // - only 1 <resource_id> exists in outgoing dir 388 // - only 1 <resource_id> exists in outgoing dir
389 // - if entry is pinned, only 1 <resource_id> exists in pinned dir. 389 // - if entry is pinned, only 1 <resource_id> exists in pinned dir.
390 390
391 // Change expected_existing_path of CACHE_TYPE_PERSISTENT (index 1). 391 // Change expected_existing_path of CACHE_TYPE_PERSISTENT (index 1).
392 paths_to_verify[1].expected_existing_path = 392 paths_to_verify[1].expected_existing_path =
393 GetCacheFilePath(resource_id, 393 GetCacheFilePath(resource_id,
394 std::string(), 394 std::string(),
395 GDataCache::CACHE_TYPE_PERSISTENT, 395 DriveCache::CACHE_TYPE_PERSISTENT,
396 GDataCache::CACHED_FILE_LOCALLY_MODIFIED); 396 DriveCache::CACHED_FILE_LOCALLY_MODIFIED);
397 397
398 // Change expected_existing_path of CACHE_TYPE_OUTGOING (index 3). 398 // Change expected_existing_path of CACHE_TYPE_OUTGOING (index 3).
399 paths_to_verify[3].expected_existing_path = 399 paths_to_verify[3].expected_existing_path =
400 GetCacheFilePath(resource_id, 400 GetCacheFilePath(resource_id,
401 std::string(), 401 std::string(),
402 GDataCache::CACHE_TYPE_OUTGOING, 402 DriveCache::CACHE_TYPE_OUTGOING,
403 GDataCache::CACHED_FILE_FROM_SERVER); 403 DriveCache::CACHED_FILE_FROM_SERVER);
404 404
405 if (cache_entry.is_pinned()) { 405 if (cache_entry.is_pinned()) {
406 // Change expected_existing_path of CACHE_TYPE_TMP but STATE_PINNED 406 // Change expected_existing_path of CACHE_TYPE_TMP but STATE_PINNED
407 // (index 2). 407 // (index 2).
408 paths_to_verify[2].expected_existing_path = 408 paths_to_verify[2].expected_existing_path =
409 GetCacheFilePath(resource_id, 409 GetCacheFilePath(resource_id,
410 std::string(), 410 std::string(),
411 GDataCache::CACHE_TYPE_PINNED, 411 DriveCache::CACHE_TYPE_PINNED,
412 GDataCache::CACHED_FILE_FROM_SERVER); 412 DriveCache::CACHED_FILE_FROM_SERVER);
413 } 413 }
414 414
415 for (size_t i = 0; i < paths_to_verify.size(); ++i) { 415 for (size_t i = 0; i < paths_to_verify.size(); ++i) {
416 const struct PathToVerify& verify = paths_to_verify[i]; 416 const struct PathToVerify& verify = paths_to_verify[i];
417 file_util::FileEnumerator enumerator( 417 file_util::FileEnumerator enumerator(
418 verify.path_to_scan.DirName(), false /* not recursive */, 418 verify.path_to_scan.DirName(), false /* not recursive */,
419 file_util::FileEnumerator::FILES | 419 file_util::FileEnumerator::FILES |
420 file_util::FileEnumerator::SHOW_SYM_LINKS, 420 file_util::FileEnumerator::SHOW_SYM_LINKS,
421 verify.path_to_scan.BaseName().value()); 421 verify.path_to_scan.BaseName().value());
422 size_t num_files_found = 0; 422 size_t num_files_found = 0;
423 for (FilePath current = enumerator.Next(); !current.empty(); 423 for (FilePath current = enumerator.Next(); !current.empty();
424 current = enumerator.Next()) { 424 current = enumerator.Next()) {
425 ++num_files_found; 425 ++num_files_found;
426 EXPECT_EQ(verify.expected_existing_path, current); 426 EXPECT_EQ(verify.expected_existing_path, current);
427 } 427 }
428 if (verify.expected_existing_path.empty()) 428 if (verify.expected_existing_path.empty())
429 EXPECT_EQ(0U, num_files_found); 429 EXPECT_EQ(0U, num_files_found);
430 else 430 else
431 EXPECT_EQ(1U, num_files_found); 431 EXPECT_EQ(1U, num_files_found);
432 } 432 }
433 } 433 }
434 } 434 }
435 435
436 void TestPin( 436 void TestPin(
437 const std::string& resource_id, 437 const std::string& resource_id,
438 const std::string& md5, 438 const std::string& md5,
439 GDataFileError expected_error, 439 GDataFileError expected_error,
440 int expected_cache_state, 440 int expected_cache_state,
441 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 441 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
442 expected_error_ = expected_error; 442 expected_error_ = expected_error;
443 expected_cache_state_ = expected_cache_state; 443 expected_cache_state_ = expected_cache_state;
444 expected_sub_dir_type_ = expected_sub_dir_type; 444 expected_sub_dir_type_ = expected_sub_dir_type;
445 445
446 cache_->PinOnUIThread( 446 cache_->PinOnUIThread(
447 resource_id, md5, 447 resource_id, md5,
448 base::Bind(&GDataCacheTest::VerifyCacheFileState, 448 base::Bind(&DriveCacheTest::VerifyCacheFileState,
449 base::Unretained(this))); 449 base::Unretained(this)));
450 450
451 test_util::RunBlockingPoolTask(); 451 test_util::RunBlockingPoolTask();
452 } 452 }
453 453
454 void TestUnpin( 454 void TestUnpin(
455 const std::string& resource_id, 455 const std::string& resource_id,
456 const std::string& md5, 456 const std::string& md5,
457 GDataFileError expected_error, 457 GDataFileError expected_error,
458 int expected_cache_state, 458 int expected_cache_state,
459 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 459 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
460 expected_error_ = expected_error; 460 expected_error_ = expected_error;
461 expected_cache_state_ = expected_cache_state; 461 expected_cache_state_ = expected_cache_state;
462 expected_sub_dir_type_ = expected_sub_dir_type; 462 expected_sub_dir_type_ = expected_sub_dir_type;
463 463
464 cache_->UnpinOnUIThread( 464 cache_->UnpinOnUIThread(
465 resource_id, md5, 465 resource_id, md5,
466 base::Bind(&GDataCacheTest::VerifyCacheFileState, 466 base::Bind(&DriveCacheTest::VerifyCacheFileState,
467 base::Unretained(this))); 467 base::Unretained(this)));
468 468
469 test_util::RunBlockingPoolTask(); 469 test_util::RunBlockingPoolTask();
470 } 470 }
471 471
472 void TestMarkDirty( 472 void TestMarkDirty(
473 const std::string& resource_id, 473 const std::string& resource_id,
474 const std::string& md5, 474 const std::string& md5,
475 GDataFileError expected_error, 475 GDataFileError expected_error,
476 int expected_cache_state, 476 int expected_cache_state,
477 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 477 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
478 expected_error_ = expected_error; 478 expected_error_ = expected_error;
479 expected_cache_state_ = expected_cache_state; 479 expected_cache_state_ = expected_cache_state;
480 expected_sub_dir_type_ = expected_sub_dir_type; 480 expected_sub_dir_type_ = expected_sub_dir_type;
481 expect_outgoing_symlink_ = false; 481 expect_outgoing_symlink_ = false;
482 482
483 cache_->MarkDirtyOnUIThread( 483 cache_->MarkDirtyOnUIThread(
484 resource_id, md5, 484 resource_id, md5,
485 base::Bind(&GDataCacheTest::VerifyMarkDirty, 485 base::Bind(&DriveCacheTest::VerifyMarkDirty,
486 base::Unretained(this))); 486 base::Unretained(this)));
487 487
488 test_util::RunBlockingPoolTask(); 488 test_util::RunBlockingPoolTask();
489 } 489 }
490 490
491 void VerifyMarkDirty(GDataFileError error, 491 void VerifyMarkDirty(GDataFileError error,
492 const std::string& resource_id, 492 const std::string& resource_id,
493 const std::string& md5, 493 const std::string& md5,
494 const FilePath& cache_file_path) { 494 const FilePath& cache_file_path) {
495 VerifyCacheFileState(error, resource_id, md5); 495 VerifyCacheFileState(error, resource_id, md5);
496 496
497 // Verify filename of |cache_file_path|. 497 // Verify filename of |cache_file_path|.
498 if (error == GDATA_FILE_OK) { 498 if (error == GDATA_FILE_OK) {
499 FilePath base_name = cache_file_path.BaseName(); 499 FilePath base_name = cache_file_path.BaseName();
500 EXPECT_EQ(util::EscapeCacheFileName(resource_id) + 500 EXPECT_EQ(util::EscapeCacheFileName(resource_id) +
501 FilePath::kExtensionSeparator + 501 FilePath::kExtensionSeparator +
502 "local", 502 "local",
503 base_name.value()); 503 base_name.value());
504 } else { 504 } else {
505 EXPECT_TRUE(cache_file_path.empty()); 505 EXPECT_TRUE(cache_file_path.empty());
506 } 506 }
507 } 507 }
508 508
509 void TestCommitDirty( 509 void TestCommitDirty(
510 const std::string& resource_id, 510 const std::string& resource_id,
511 const std::string& md5, 511 const std::string& md5,
512 GDataFileError expected_error, 512 GDataFileError expected_error,
513 int expected_cache_state, 513 int expected_cache_state,
514 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 514 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
515 expected_error_ = expected_error; 515 expected_error_ = expected_error;
516 expected_cache_state_ = expected_cache_state; 516 expected_cache_state_ = expected_cache_state;
517 expected_sub_dir_type_ = expected_sub_dir_type; 517 expected_sub_dir_type_ = expected_sub_dir_type;
518 expect_outgoing_symlink_ = true; 518 expect_outgoing_symlink_ = true;
519 519
520 cache_->CommitDirtyOnUIThread( 520 cache_->CommitDirtyOnUIThread(
521 resource_id, md5, 521 resource_id, md5,
522 base::Bind(&GDataCacheTest::VerifyCacheFileState, 522 base::Bind(&DriveCacheTest::VerifyCacheFileState,
523 base::Unretained(this))); 523 base::Unretained(this)));
524 524
525 test_util::RunBlockingPoolTask(); 525 test_util::RunBlockingPoolTask();
526 } 526 }
527 527
528 void TestClearDirty( 528 void TestClearDirty(
529 const std::string& resource_id, 529 const std::string& resource_id,
530 const std::string& md5, 530 const std::string& md5,
531 GDataFileError expected_error, 531 GDataFileError expected_error,
532 int expected_cache_state, 532 int expected_cache_state,
533 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 533 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
534 expected_error_ = expected_error; 534 expected_error_ = expected_error;
535 expected_cache_state_ = expected_cache_state; 535 expected_cache_state_ = expected_cache_state;
536 expected_sub_dir_type_ = expected_sub_dir_type; 536 expected_sub_dir_type_ = expected_sub_dir_type;
537 expect_outgoing_symlink_ = false; 537 expect_outgoing_symlink_ = false;
538 538
539 cache_->ClearDirtyOnUIThread(resource_id, md5, 539 cache_->ClearDirtyOnUIThread(resource_id, md5,
540 base::Bind(&GDataCacheTest::VerifyCacheFileState, 540 base::Bind(&DriveCacheTest::VerifyCacheFileState,
541 base::Unretained(this))); 541 base::Unretained(this)));
542 542
543 test_util::RunBlockingPoolTask(); 543 test_util::RunBlockingPoolTask();
544 } 544 }
545 545
546 void TestSetMountedState( 546 void TestSetMountedState(
547 const std::string& resource_id, 547 const std::string& resource_id,
548 const std::string& md5, 548 const std::string& md5,
549 const FilePath& file_path, 549 const FilePath& file_path,
550 bool to_mount, 550 bool to_mount,
551 GDataFileError expected_error, 551 GDataFileError expected_error,
552 int expected_cache_state, 552 int expected_cache_state,
553 GDataCache::CacheSubDirectoryType expected_sub_dir_type) { 553 DriveCache::CacheSubDirectoryType expected_sub_dir_type) {
554 expected_error_ = expected_error; 554 expected_error_ = expected_error;
555 expected_cache_state_ = expected_cache_state; 555 expected_cache_state_ = expected_cache_state;
556 expected_sub_dir_type_ = expected_sub_dir_type; 556 expected_sub_dir_type_ = expected_sub_dir_type;
557 expect_outgoing_symlink_ = false; 557 expect_outgoing_symlink_ = false;
558 558
559 cache_->SetMountedStateOnUIThread(file_path, to_mount, 559 cache_->SetMountedStateOnUIThread(file_path, to_mount,
560 base::Bind(&GDataCacheTest::VerifySetMountedState, 560 base::Bind(&DriveCacheTest::VerifySetMountedState,
561 base::Unretained(this), resource_id, md5, to_mount)); 561 base::Unretained(this), resource_id, md5, to_mount));
562 562
563 test_util::RunBlockingPoolTask(); 563 test_util::RunBlockingPoolTask();
564 } 564 }
565 565
566 void VerifySetMountedState(const std::string& resource_id, 566 void VerifySetMountedState(const std::string& resource_id,
567 const std::string& md5, 567 const std::string& md5,
568 bool to_mount, 568 bool to_mount,
569 GDataFileError error, 569 GDataFileError error,
570 const FilePath& file_path) { 570 const FilePath& file_path) {
571 ++num_callback_invocations_; 571 ++num_callback_invocations_;
572 EXPECT_TRUE(file_util::PathExists(file_path)); 572 EXPECT_TRUE(file_util::PathExists(file_path));
573 EXPECT_TRUE(file_path == cache_->GetCacheFilePath( 573 EXPECT_TRUE(file_path == cache_->GetCacheFilePath(
574 resource_id, 574 resource_id,
575 md5, 575 md5,
576 expected_sub_dir_type_, 576 expected_sub_dir_type_,
577 to_mount ? 577 to_mount ?
578 GDataCache::CACHED_FILE_MOUNTED : 578 DriveCache::CACHED_FILE_MOUNTED :
579 GDataCache::CACHED_FILE_FROM_SERVER)); 579 DriveCache::CACHED_FILE_FROM_SERVER));
580 } 580 }
581 581
582 void VerifyCacheFileState(GDataFileError error, 582 void VerifyCacheFileState(GDataFileError error,
583 const std::string& resource_id, 583 const std::string& resource_id,
584 const std::string& md5) { 584 const std::string& md5) {
585 ++num_callback_invocations_; 585 ++num_callback_invocations_;
586 586
587 EXPECT_EQ(expected_error_, error); 587 EXPECT_EQ(expected_error_, error);
588 588
589 // Verify cache map. 589 // Verify cache map.
590 DriveCacheEntry cache_entry; 590 DriveCacheEntry cache_entry;
591 const bool cache_entry_found = 591 const bool cache_entry_found =
592 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); 592 GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry);
593 if (test_util::ToCacheEntry(expected_cache_state_).is_present() || 593 if (test_util::ToCacheEntry(expected_cache_state_).is_present() ||
594 test_util::ToCacheEntry(expected_cache_state_).is_pinned()) { 594 test_util::ToCacheEntry(expected_cache_state_).is_pinned()) {
595 ASSERT_TRUE(cache_entry_found); 595 ASSERT_TRUE(cache_entry_found);
596 EXPECT_TRUE(test_util::CacheStatesEqual( 596 EXPECT_TRUE(test_util::CacheStatesEqual(
597 test_util::ToCacheEntry(expected_cache_state_), 597 test_util::ToCacheEntry(expected_cache_state_),
598 cache_entry)); 598 cache_entry));
599 EXPECT_EQ(expected_sub_dir_type_, 599 EXPECT_EQ(expected_sub_dir_type_,
600 GDataCache::GetSubDirectoryType(cache_entry)); 600 DriveCache::GetSubDirectoryType(cache_entry));
601 } else { 601 } else {
602 EXPECT_FALSE(cache_entry_found); 602 EXPECT_FALSE(cache_entry_found);
603 } 603 }
604 604
605 // Verify actual cache file. 605 // Verify actual cache file.
606 FilePath dest_path = cache_->GetCacheFilePath( 606 FilePath dest_path = cache_->GetCacheFilePath(
607 resource_id, 607 resource_id,
608 md5, 608 md5,
609 test_util::ToCacheEntry(expected_cache_state_).is_pinned() || 609 test_util::ToCacheEntry(expected_cache_state_).is_pinned() ||
610 test_util::ToCacheEntry(expected_cache_state_).is_dirty() ? 610 test_util::ToCacheEntry(expected_cache_state_).is_dirty() ?
611 GDataCache::CACHE_TYPE_PERSISTENT : 611 DriveCache::CACHE_TYPE_PERSISTENT :
612 GDataCache::CACHE_TYPE_TMP, 612 DriveCache::CACHE_TYPE_TMP,
613 test_util::ToCacheEntry(expected_cache_state_).is_dirty() ? 613 test_util::ToCacheEntry(expected_cache_state_).is_dirty() ?
614 GDataCache::CACHED_FILE_LOCALLY_MODIFIED : 614 DriveCache::CACHED_FILE_LOCALLY_MODIFIED :
615 GDataCache::CACHED_FILE_FROM_SERVER); 615 DriveCache::CACHED_FILE_FROM_SERVER);
616 bool exists = file_util::PathExists(dest_path); 616 bool exists = file_util::PathExists(dest_path);
617 if (test_util::ToCacheEntry(expected_cache_state_).is_present()) 617 if (test_util::ToCacheEntry(expected_cache_state_).is_present())
618 EXPECT_TRUE(exists); 618 EXPECT_TRUE(exists);
619 else 619 else
620 EXPECT_FALSE(exists); 620 EXPECT_FALSE(exists);
621 621
622 // Verify symlink in pinned dir. 622 // Verify symlink in pinned dir.
623 FilePath symlink_path = cache_->GetCacheFilePath( 623 FilePath symlink_path = cache_->GetCacheFilePath(
624 resource_id, 624 resource_id,
625 std::string(), 625 std::string(),
626 GDataCache::CACHE_TYPE_PINNED, 626 DriveCache::CACHE_TYPE_PINNED,
627 GDataCache::CACHED_FILE_FROM_SERVER); 627 DriveCache::CACHED_FILE_FROM_SERVER);
628 // Check that pin symlink exists, without deferencing to target path. 628 // Check that pin symlink exists, without deferencing to target path.
629 exists = file_util::IsLink(symlink_path); 629 exists = file_util::IsLink(symlink_path);
630 if (test_util::ToCacheEntry(expected_cache_state_).is_pinned()) { 630 if (test_util::ToCacheEntry(expected_cache_state_).is_pinned()) {
631 EXPECT_TRUE(exists); 631 EXPECT_TRUE(exists);
632 FilePath target_path; 632 FilePath target_path;
633 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); 633 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path));
634 if (test_util::ToCacheEntry(expected_cache_state_).is_present()) 634 if (test_util::ToCacheEntry(expected_cache_state_).is_present())
635 EXPECT_EQ(dest_path, target_path); 635 EXPECT_EQ(dest_path, target_path);
636 else 636 else
637 EXPECT_EQ(kSymLinkToDevNull, target_path.value()); 637 EXPECT_EQ(kSymLinkToDevNull, target_path.value());
638 } else { 638 } else {
639 EXPECT_FALSE(exists); 639 EXPECT_FALSE(exists);
640 } 640 }
641 641
642 // Verify symlink in outgoing dir. 642 // Verify symlink in outgoing dir.
643 symlink_path = cache_->GetCacheFilePath( 643 symlink_path = cache_->GetCacheFilePath(
644 resource_id, 644 resource_id,
645 std::string(), 645 std::string(),
646 GDataCache::CACHE_TYPE_OUTGOING, 646 DriveCache::CACHE_TYPE_OUTGOING,
647 GDataCache::CACHED_FILE_FROM_SERVER); 647 DriveCache::CACHED_FILE_FROM_SERVER);
648 // Check that outgoing symlink exists, without deferencing to target path. 648 // Check that outgoing symlink exists, without deferencing to target path.
649 exists = file_util::IsLink(symlink_path); 649 exists = file_util::IsLink(symlink_path);
650 if (expect_outgoing_symlink_ && 650 if (expect_outgoing_symlink_ &&
651 test_util::ToCacheEntry(expected_cache_state_).is_dirty()) { 651 test_util::ToCacheEntry(expected_cache_state_).is_dirty()) {
652 EXPECT_TRUE(exists); 652 EXPECT_TRUE(exists);
653 FilePath target_path; 653 FilePath target_path;
654 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path)); 654 EXPECT_TRUE(file_util::ReadSymbolicLink(symlink_path, &target_path));
655 EXPECT_TRUE(target_path.value() != kSymLinkToDevNull); 655 EXPECT_TRUE(target_path.value() != kSymLinkToDevNull);
656 if (test_util::ToCacheEntry(expected_cache_state_).is_present()) 656 if (test_util::ToCacheEntry(expected_cache_state_).is_present())
657 EXPECT_EQ(dest_path, target_path); 657 EXPECT_EQ(dest_path, target_path);
658 } else { 658 } else {
659 EXPECT_FALSE(exists); 659 EXPECT_FALSE(exists);
660 } 660 }
661 } 661 }
662 662
663 FilePath GetCacheFilePath(const std::string& resource_id, 663 FilePath GetCacheFilePath(const std::string& resource_id,
664 const std::string& md5, 664 const std::string& md5,
665 GDataCache::CacheSubDirectoryType sub_dir_type, 665 DriveCache::CacheSubDirectoryType sub_dir_type,
666 GDataCache::CachedFileOrigin file_origin) { 666 DriveCache::CachedFileOrigin file_origin) {
667 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type, 667 return cache_->GetCacheFilePath(resource_id, md5, sub_dir_type,
668 file_origin); 668 file_origin);
669 } 669 }
670 670
671 // Helper function to call GetCacheEntry from origin thread. 671 // Helper function to call GetCacheEntry from origin thread.
672 bool GetCacheEntryFromOriginThread(const std::string& resource_id, 672 bool GetCacheEntryFromOriginThread(const std::string& resource_id,
673 const std::string& md5, 673 const std::string& md5,
674 DriveCacheEntry* cache_entry) { 674 DriveCacheEntry* cache_entry) {
675 bool result = false; 675 bool result = false;
676 blocking_task_runner_->PostTask( 676 blocking_task_runner_->PostTask(
677 FROM_HERE, 677 FROM_HERE,
678 base::Bind(&GDataCacheTest::GetCacheEntryFromOriginThreadInternal, 678 base::Bind(&DriveCacheTest::GetCacheEntryFromOriginThreadInternal,
679 base::Unretained(this), 679 base::Unretained(this),
680 resource_id, 680 resource_id,
681 md5, 681 md5,
682 cache_entry, 682 cache_entry,
683 &result)); 683 &result));
684 test_util::RunBlockingPoolTask(); 684 test_util::RunBlockingPoolTask();
685 return result; 685 return result;
686 } 686 }
687 687
688 // Used to implement GetCacheEntry. 688 // Used to implement GetCacheEntry.
(...skipping 11 matching lines...) Expand all
700 DriveCacheEntry cache_entry; 700 DriveCacheEntry cache_entry;
701 return GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry); 701 return GetCacheEntryFromOriginThread(resource_id, md5, &cache_entry);
702 } 702 }
703 703
704 void TestGetCacheFilePath(const std::string& resource_id, 704 void TestGetCacheFilePath(const std::string& resource_id,
705 const std::string& md5, 705 const std::string& md5,
706 const std::string& expected_filename) { 706 const std::string& expected_filename) {
707 FilePath actual_path = cache_->GetCacheFilePath( 707 FilePath actual_path = cache_->GetCacheFilePath(
708 resource_id, 708 resource_id,
709 md5, 709 md5,
710 GDataCache::CACHE_TYPE_TMP, 710 DriveCache::CACHE_TYPE_TMP,
711 GDataCache::CACHED_FILE_FROM_SERVER); 711 DriveCache::CACHED_FILE_FROM_SERVER);
712 FilePath expected_path = 712 FilePath expected_path =
713 cache_->GetCacheDirectoryPath(GDataCache::CACHE_TYPE_TMP); 713 cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_TMP);
714 expected_path = expected_path.Append(expected_filename); 714 expected_path = expected_path.Append(expected_filename);
715 EXPECT_EQ(expected_path, actual_path); 715 EXPECT_EQ(expected_path, actual_path);
716 716
717 FilePath base_name = actual_path.BaseName(); 717 FilePath base_name = actual_path.BaseName();
718 718
719 // FilePath::Extension returns ".", so strip it. 719 // FilePath::Extension returns ".", so strip it.
720 std::string unescaped_md5 = util::UnescapeCacheFileName( 720 std::string unescaped_md5 = util::UnescapeCacheFileName(
721 base_name.Extension().substr(1)); 721 base_name.Extension().substr(1));
722 EXPECT_EQ(md5, unescaped_md5); 722 EXPECT_EQ(md5, unescaped_md5);
723 std::string unescaped_resource_id = util::UnescapeCacheFileName( 723 std::string unescaped_resource_id = util::UnescapeCacheFileName(
724 base_name.RemoveExtension().value()); 724 base_name.RemoveExtension().value());
725 EXPECT_EQ(resource_id, unescaped_resource_id); 725 EXPECT_EQ(resource_id, unescaped_resource_id);
726 } 726 }
727 727
728 // Returns the number of the cache files with name <resource_id>, and Confirm 728 // Returns the number of the cache files with name <resource_id>, and Confirm
729 // that they have the <md5>. This should return 1 or 0. 729 // that they have the <md5>. This should return 1 or 0.
730 size_t CountCacheFiles(const std::string& resource_id, 730 size_t CountCacheFiles(const std::string& resource_id,
731 const std::string& md5) { 731 const std::string& md5) {
732 FilePath path = GetCacheFilePath( 732 FilePath path = GetCacheFilePath(
733 resource_id, "*", 733 resource_id, "*",
734 (test_util::ToCacheEntry(expected_cache_state_).is_pinned() ? 734 (test_util::ToCacheEntry(expected_cache_state_).is_pinned() ?
735 GDataCache::CACHE_TYPE_PERSISTENT : 735 DriveCache::CACHE_TYPE_PERSISTENT :
736 GDataCache::CACHE_TYPE_TMP), 736 DriveCache::CACHE_TYPE_TMP),
737 GDataCache::CACHED_FILE_FROM_SERVER); 737 DriveCache::CACHED_FILE_FROM_SERVER);
738 file_util::FileEnumerator enumerator(path.DirName(), false, 738 file_util::FileEnumerator enumerator(path.DirName(), false,
739 file_util::FileEnumerator::FILES, 739 file_util::FileEnumerator::FILES,
740 path.BaseName().value()); 740 path.BaseName().value());
741 size_t num_files_found = 0; 741 size_t num_files_found = 0;
742 for (FilePath current = enumerator.Next(); !current.empty(); 742 for (FilePath current = enumerator.Next(); !current.empty();
743 current = enumerator.Next()) { 743 current = enumerator.Next()) {
744 ++num_files_found; 744 ++num_files_found;
745 EXPECT_EQ(util::EscapeCacheFileName(resource_id) + 745 EXPECT_EQ(util::EscapeCacheFileName(resource_id) +
746 FilePath::kExtensionSeparator + 746 FilePath::kExtensionSeparator +
747 util::EscapeCacheFileName(md5), 747 util::EscapeCacheFileName(md5),
(...skipping 14 matching lines...) Expand all
762 return path; 762 return path;
763 } 763 }
764 764
765 MessageLoopForUI message_loop_; 765 MessageLoopForUI message_loop_;
766 // The order of the test threads is important, do not change the order. 766 // The order of the test threads is important, do not change the order.
767 // See also content/browser/browser_thread_imple.cc. 767 // See also content/browser/browser_thread_imple.cc.
768 content::TestBrowserThread ui_thread_; 768 content::TestBrowserThread ui_thread_;
769 content::TestBrowserThread io_thread_; 769 content::TestBrowserThread io_thread_;
770 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 770 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
771 scoped_ptr<TestingProfile> profile_; 771 scoped_ptr<TestingProfile> profile_;
772 GDataCache* cache_; 772 DriveCache* cache_;
773 MockFreeDiskSpaceGetter* mock_free_disk_space_checker_; 773 MockFreeDiskSpaceGetter* mock_free_disk_space_checker_;
774 scoped_ptr<StrictMock<MockGDataCacheObserver> > mock_cache_observer_; 774 scoped_ptr<StrictMock<MockDriveCacheObserver> > mock_cache_observer_;
775 775
776 int num_callback_invocations_; 776 int num_callback_invocations_;
777 GDataFileError expected_error_; 777 GDataFileError expected_error_;
778 int expected_cache_state_; 778 int expected_cache_state_;
779 GDataCache::CacheSubDirectoryType expected_sub_dir_type_; 779 DriveCache::CacheSubDirectoryType expected_sub_dir_type_;
780 bool expected_success_; 780 bool expected_success_;
781 bool expect_outgoing_symlink_; 781 bool expect_outgoing_symlink_;
782 std::string expected_file_extension_; 782 std::string expected_file_extension_;
783 int root_feed_changestamp_; 783 int root_feed_changestamp_;
784 }; 784 };
785 785
786 TEST_F(GDataCacheTest, InitializeCache) { 786 TEST_F(DriveCacheTest, InitializeCache) {
787 PrepareForInitCacheTest(); 787 PrepareForInitCacheTest();
788 TestInitializeCache(); 788 TestInitializeCache();
789 } 789 }
790 790
791 TEST_F(GDataCacheTest, GetCacheFilePath) { 791 TEST_F(DriveCacheTest, GetCacheFilePath) {
792 // Use alphanumeric characters for resource id. 792 // Use alphanumeric characters for resource id.
793 std::string resource_id("pdf:1a2b"); 793 std::string resource_id("pdf:1a2b");
794 std::string md5("abcdef0123456789"); 794 std::string md5("abcdef0123456789");
795 TestGetCacheFilePath(resource_id, md5, 795 TestGetCacheFilePath(resource_id, md5,
796 resource_id + FilePath::kExtensionSeparator + md5); 796 resource_id + FilePath::kExtensionSeparator + md5);
797 EXPECT_EQ(0, num_callback_invocations_); 797 EXPECT_EQ(0, num_callback_invocations_);
798 798
799 // Use non-alphanumeric characters for resource id, including '.' which is an 799 // Use non-alphanumeric characters for resource id, including '.' which is an
800 // extension separator, to test that the characters are escaped and unescaped 800 // extension separator, to test that the characters are escaped and unescaped
801 // correctly, and '.' doesn't mess up the filename format and operations. 801 // correctly, and '.' doesn't mess up the filename format and operations.
802 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; 802 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?";
803 std::string escaped_resource_id = util::EscapeCacheFileName(resource_id); 803 std::string escaped_resource_id = util::EscapeCacheFileName(resource_id);
804 std::string escaped_md5 = util::EscapeCacheFileName(md5); 804 std::string escaped_md5 = util::EscapeCacheFileName(md5);
805 num_callback_invocations_ = 0; 805 num_callback_invocations_ = 0;
806 TestGetCacheFilePath(resource_id, md5, 806 TestGetCacheFilePath(resource_id, md5,
807 escaped_resource_id + FilePath::kExtensionSeparator + 807 escaped_resource_id + FilePath::kExtensionSeparator +
808 escaped_md5); 808 escaped_md5);
809 EXPECT_EQ(0, num_callback_invocations_); 809 EXPECT_EQ(0, num_callback_invocations_);
810 } 810 }
811 811
812 TEST_F(GDataCacheTest, StoreToCacheSimple) { 812 TEST_F(DriveCacheTest, StoreToCacheSimple) {
813 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 813 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
814 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 814 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
815 815
816 std::string resource_id("pdf:1a2b"); 816 std::string resource_id("pdf:1a2b");
817 std::string md5("abcdef0123456789"); 817 std::string md5("abcdef0123456789");
818 818
819 // Store an existing file. 819 // Store an existing file.
820 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 820 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
821 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 821 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
822 GDataCache::CACHE_TYPE_TMP); 822 DriveCache::CACHE_TYPE_TMP);
823 EXPECT_EQ(1, num_callback_invocations_); 823 EXPECT_EQ(1, num_callback_invocations_);
824 824
825 // Store a non-existent file to the same |resource_id| and |md5|. 825 // Store a non-existent file to the same |resource_id| and |md5|.
826 num_callback_invocations_ = 0; 826 num_callback_invocations_ = 0;
827 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), 827 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"),
828 GDATA_FILE_ERROR_FAILED, 828 GDATA_FILE_ERROR_FAILED,
829 test_util::TEST_CACHE_STATE_PRESENT, 829 test_util::TEST_CACHE_STATE_PRESENT,
830 GDataCache::CACHE_TYPE_TMP); 830 DriveCache::CACHE_TYPE_TMP);
831 EXPECT_EQ(1, num_callback_invocations_); 831 EXPECT_EQ(1, num_callback_invocations_);
832 832
833 // Store a different existing file to the same |resource_id| but different 833 // Store a different existing file to the same |resource_id| but different
834 // |md5|. 834 // |md5|.
835 md5 = "new_md5"; 835 md5 = "new_md5";
836 num_callback_invocations_ = 0; 836 num_callback_invocations_ = 0;
837 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"), 837 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"),
838 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 838 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
839 GDataCache::CACHE_TYPE_TMP); 839 DriveCache::CACHE_TYPE_TMP);
840 EXPECT_EQ(1, num_callback_invocations_); 840 EXPECT_EQ(1, num_callback_invocations_);
841 841
842 // Verify that there's only one file with name <resource_id>, i.e. previously 842 // Verify that there's only one file with name <resource_id>, i.e. previously
843 // cached file with the different md5 should be deleted. 843 // cached file with the different md5 should be deleted.
844 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); 844 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5));
845 } 845 }
846 846
847 TEST_F(GDataCacheTest, GetFromCacheSimple) { 847 TEST_F(DriveCacheTest, GetFromCacheSimple) {
848 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 848 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
849 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 849 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
850 850
851 std::string resource_id("pdf:1a2b"); 851 std::string resource_id("pdf:1a2b");
852 std::string md5("abcdef0123456789"); 852 std::string md5("abcdef0123456789");
853 // First store a file to cache. 853 // First store a file to cache.
854 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 854 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
855 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 855 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
856 GDataCache::CACHE_TYPE_TMP); 856 DriveCache::CACHE_TYPE_TMP);
857 857
858 // Then try to get the existing file from cache. 858 // Then try to get the existing file from cache.
859 num_callback_invocations_ = 0; 859 num_callback_invocations_ = 0;
860 TestGetFileFromCacheByResourceIdAndMd5( 860 TestGetFileFromCacheByResourceIdAndMd5(
861 resource_id, md5, GDATA_FILE_OK, md5); 861 resource_id, md5, GDATA_FILE_OK, md5);
862 EXPECT_EQ(1, num_callback_invocations_); 862 EXPECT_EQ(1, num_callback_invocations_);
863 863
864 // Get file from cache with same resource id as existing file but different 864 // Get file from cache with same resource id as existing file but different
865 // md5. 865 // md5.
866 num_callback_invocations_ = 0; 866 num_callback_invocations_ = 0;
867 TestGetFileFromCacheByResourceIdAndMd5( 867 TestGetFileFromCacheByResourceIdAndMd5(
868 resource_id, "9999", GDATA_FILE_ERROR_NOT_FOUND, md5); 868 resource_id, "9999", GDATA_FILE_ERROR_NOT_FOUND, md5);
869 EXPECT_EQ(1, num_callback_invocations_); 869 EXPECT_EQ(1, num_callback_invocations_);
870 870
871 // Get file from cache with different resource id from existing file but same 871 // Get file from cache with different resource id from existing file but same
872 // md5. 872 // md5.
873 num_callback_invocations_ = 0; 873 num_callback_invocations_ = 0;
874 resource_id = "document:1a2b"; 874 resource_id = "document:1a2b";
875 TestGetFileFromCacheByResourceIdAndMd5( 875 TestGetFileFromCacheByResourceIdAndMd5(
876 resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, md5); 876 resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, md5);
877 EXPECT_EQ(1, num_callback_invocations_); 877 EXPECT_EQ(1, num_callback_invocations_);
878 } 878 }
879 879
880 TEST_F(GDataCacheTest, RemoveFromCacheSimple) { 880 TEST_F(DriveCacheTest, RemoveFromCacheSimple) {
881 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 881 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
882 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 882 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
883 883
884 // Use alphanumeric characters for resource id. 884 // Use alphanumeric characters for resource id.
885 std::string resource_id("pdf:1a2b"); 885 std::string resource_id("pdf:1a2b");
886 std::string md5("abcdef0123456789"); 886 std::string md5("abcdef0123456789");
887 // First store a file to cache. 887 // First store a file to cache.
888 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 888 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
889 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 889 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
890 GDataCache::CACHE_TYPE_TMP); 890 DriveCache::CACHE_TYPE_TMP);
891 891
892 // Then try to remove existing file from cache. 892 // Then try to remove existing file from cache.
893 num_callback_invocations_ = 0; 893 num_callback_invocations_ = 0;
894 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 894 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
895 EXPECT_EQ(1, num_callback_invocations_); 895 EXPECT_EQ(1, num_callback_invocations_);
896 896
897 // Repeat using non-alphanumeric characters for resource id, including '.' 897 // Repeat using non-alphanumeric characters for resource id, including '.'
898 // which is an extension separator. 898 // which is an extension separator.
899 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; 899 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?";
900 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 900 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
901 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 901 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
902 GDataCache::CACHE_TYPE_TMP); 902 DriveCache::CACHE_TYPE_TMP);
903 903
904 num_callback_invocations_ = 0; 904 num_callback_invocations_ = 0;
905 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 905 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
906 EXPECT_EQ(1, num_callback_invocations_); 906 EXPECT_EQ(1, num_callback_invocations_);
907 } 907 }
908 908
909 TEST_F(GDataCacheTest, PinAndUnpin) { 909 TEST_F(DriveCacheTest, PinAndUnpin) {
910 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 910 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
911 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 911 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
912 912
913 std::string resource_id("pdf:1a2b"); 913 std::string resource_id("pdf:1a2b");
914 std::string md5("abcdef0123456789"); 914 std::string md5("abcdef0123456789");
915 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(2); 915 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(2);
916 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) 916 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5))
917 .Times(1); 917 .Times(1);
918 918
919 // First store a file to cache. 919 // First store a file to cache.
920 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 920 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
921 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 921 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
922 GDataCache::CACHE_TYPE_TMP); 922 DriveCache::CACHE_TYPE_TMP);
923 923
924 // Pin the existing file in cache. 924 // Pin the existing file in cache.
925 num_callback_invocations_ = 0; 925 num_callback_invocations_ = 0;
926 TestPin(resource_id, md5, GDATA_FILE_OK, 926 TestPin(resource_id, md5, GDATA_FILE_OK,
927 test_util::TEST_CACHE_STATE_PRESENT | 927 test_util::TEST_CACHE_STATE_PRESENT |
928 test_util::TEST_CACHE_STATE_PINNED | 928 test_util::TEST_CACHE_STATE_PINNED |
929 test_util::TEST_CACHE_STATE_PERSISTENT, 929 test_util::TEST_CACHE_STATE_PERSISTENT,
930 GDataCache::CACHE_TYPE_PERSISTENT); 930 DriveCache::CACHE_TYPE_PERSISTENT);
931 EXPECT_EQ(1, num_callback_invocations_); 931 EXPECT_EQ(1, num_callback_invocations_);
932 932
933 // Unpin the existing file in cache. 933 // Unpin the existing file in cache.
934 num_callback_invocations_ = 0; 934 num_callback_invocations_ = 0;
935 TestUnpin(resource_id, md5, GDATA_FILE_OK, 935 TestUnpin(resource_id, md5, GDATA_FILE_OK,
936 test_util::TEST_CACHE_STATE_PRESENT, 936 test_util::TEST_CACHE_STATE_PRESENT,
937 GDataCache::CACHE_TYPE_TMP); 937 DriveCache::CACHE_TYPE_TMP);
938 EXPECT_EQ(1, num_callback_invocations_); 938 EXPECT_EQ(1, num_callback_invocations_);
939 939
940 // Pin back the same existing file in cache. 940 // Pin back the same existing file in cache.
941 num_callback_invocations_ = 0; 941 num_callback_invocations_ = 0;
942 TestPin(resource_id, md5, GDATA_FILE_OK, 942 TestPin(resource_id, md5, GDATA_FILE_OK,
943 test_util::TEST_CACHE_STATE_PRESENT | 943 test_util::TEST_CACHE_STATE_PRESENT |
944 test_util::TEST_CACHE_STATE_PINNED | 944 test_util::TEST_CACHE_STATE_PINNED |
945 test_util::TEST_CACHE_STATE_PERSISTENT, 945 test_util::TEST_CACHE_STATE_PERSISTENT,
946 GDataCache::CACHE_TYPE_PERSISTENT); 946 DriveCache::CACHE_TYPE_PERSISTENT);
947 EXPECT_EQ(1, num_callback_invocations_); 947 EXPECT_EQ(1, num_callback_invocations_);
948 948
949 // Pin a non-existent file in cache. 949 // Pin a non-existent file in cache.
950 resource_id = "document:1a2b"; 950 resource_id = "document:1a2b";
951 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 951 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
952 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) 952 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5))
953 .Times(1); 953 .Times(1);
954 954
955 num_callback_invocations_ = 0; 955 num_callback_invocations_ = 0;
956 TestPin(resource_id, md5, GDATA_FILE_OK, 956 TestPin(resource_id, md5, GDATA_FILE_OK,
957 test_util::TEST_CACHE_STATE_PINNED, 957 test_util::TEST_CACHE_STATE_PINNED,
958 GDataCache::CACHE_TYPE_TMP); 958 DriveCache::CACHE_TYPE_TMP);
959 EXPECT_EQ(1, num_callback_invocations_); 959 EXPECT_EQ(1, num_callback_invocations_);
960 960
961 // Unpin the previously pinned non-existent file in cache. 961 // Unpin the previously pinned non-existent file in cache.
962 num_callback_invocations_ = 0; 962 num_callback_invocations_ = 0;
963 TestUnpin(resource_id, md5, GDATA_FILE_OK, 963 TestUnpin(resource_id, md5, GDATA_FILE_OK,
964 test_util::TEST_CACHE_STATE_NONE, 964 test_util::TEST_CACHE_STATE_NONE,
965 GDataCache::CACHE_TYPE_TMP); 965 DriveCache::CACHE_TYPE_TMP);
966 EXPECT_EQ(1, num_callback_invocations_); 966 EXPECT_EQ(1, num_callback_invocations_);
967 967
968 // Unpin a file that doesn't exist in cache and is not pinned, i.e. cache 968 // Unpin a file that doesn't exist in cache and is not pinned, i.e. cache
969 // has zero knowledge of the file. 969 // has zero knowledge of the file.
970 resource_id = "not-in-cache:1a2b"; 970 resource_id = "not-in-cache:1a2b";
971 // Because unpinning will fail, OnCacheUnpinned() won't be run. 971 // Because unpinning will fail, OnCacheUnpinned() won't be run.
972 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) 972 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5))
973 .Times(0); 973 .Times(0);
974 974
975 num_callback_invocations_ = 0; 975 num_callback_invocations_ = 0;
976 TestUnpin(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, 976 TestUnpin(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND,
977 test_util::TEST_CACHE_STATE_NONE, 977 test_util::TEST_CACHE_STATE_NONE,
978 GDataCache::CACHE_TYPE_TMP /* non-applicable */); 978 DriveCache::CACHE_TYPE_TMP /* non-applicable */);
979 EXPECT_EQ(1, num_callback_invocations_); 979 EXPECT_EQ(1, num_callback_invocations_);
980 } 980 }
981 981
982 TEST_F(GDataCacheTest, StoreToCachePinned) { 982 TEST_F(DriveCacheTest, StoreToCachePinned) {
983 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 983 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
984 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 984 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
985 985
986 std::string resource_id("pdf:1a2b"); 986 std::string resource_id("pdf:1a2b");
987 std::string md5("abcdef0123456789"); 987 std::string md5("abcdef0123456789");
988 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 988 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
989 989
990 // Pin a non-existent file. 990 // Pin a non-existent file.
991 TestPin(resource_id, md5, GDATA_FILE_OK, 991 TestPin(resource_id, md5, GDATA_FILE_OK,
992 test_util::TEST_CACHE_STATE_PINNED, 992 test_util::TEST_CACHE_STATE_PINNED,
993 GDataCache::CACHE_TYPE_TMP); 993 DriveCache::CACHE_TYPE_TMP);
994 994
995 // Store an existing file to a previously pinned file. 995 // Store an existing file to a previously pinned file.
996 num_callback_invocations_ = 0; 996 num_callback_invocations_ = 0;
997 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 997 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
998 GDATA_FILE_OK, 998 GDATA_FILE_OK,
999 test_util::TEST_CACHE_STATE_PRESENT | 999 test_util::TEST_CACHE_STATE_PRESENT |
1000 test_util::TEST_CACHE_STATE_PINNED | 1000 test_util::TEST_CACHE_STATE_PINNED |
1001 test_util::TEST_CACHE_STATE_PERSISTENT, 1001 test_util::TEST_CACHE_STATE_PERSISTENT,
1002 GDataCache::CACHE_TYPE_PERSISTENT); 1002 DriveCache::CACHE_TYPE_PERSISTENT);
1003 EXPECT_EQ(1, num_callback_invocations_); 1003 EXPECT_EQ(1, num_callback_invocations_);
1004 1004
1005 // Store a non-existent file to a previously pinned and stored file. 1005 // Store a non-existent file to a previously pinned and stored file.
1006 num_callback_invocations_ = 0; 1006 num_callback_invocations_ = 0;
1007 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"), 1007 TestStoreToCache(resource_id, md5, FilePath("./non_existent.json"),
1008 GDATA_FILE_ERROR_FAILED, 1008 GDATA_FILE_ERROR_FAILED,
1009 test_util::TEST_CACHE_STATE_PRESENT | 1009 test_util::TEST_CACHE_STATE_PRESENT |
1010 test_util::TEST_CACHE_STATE_PINNED | 1010 test_util::TEST_CACHE_STATE_PINNED |
1011 test_util::TEST_CACHE_STATE_PERSISTENT, 1011 test_util::TEST_CACHE_STATE_PERSISTENT,
1012 GDataCache::CACHE_TYPE_PERSISTENT); 1012 DriveCache::CACHE_TYPE_PERSISTENT);
1013 EXPECT_EQ(1, num_callback_invocations_); 1013 EXPECT_EQ(1, num_callback_invocations_);
1014 } 1014 }
1015 1015
1016 TEST_F(GDataCacheTest, GetFromCachePinned) { 1016 TEST_F(DriveCacheTest, GetFromCachePinned) {
1017 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1017 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1018 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1018 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1019 1019
1020 std::string resource_id("pdf:1a2b"); 1020 std::string resource_id("pdf:1a2b");
1021 std::string md5("abcdef0123456789"); 1021 std::string md5("abcdef0123456789");
1022 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1022 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1023 1023
1024 // Pin a non-existent file. 1024 // Pin a non-existent file.
1025 TestPin(resource_id, md5, GDATA_FILE_OK, 1025 TestPin(resource_id, md5, GDATA_FILE_OK,
1026 test_util::TEST_CACHE_STATE_PINNED, 1026 test_util::TEST_CACHE_STATE_PINNED,
1027 GDataCache::CACHE_TYPE_TMP); 1027 DriveCache::CACHE_TYPE_TMP);
1028 1028
1029 // Get the non-existent pinned file from cache. 1029 // Get the non-existent pinned file from cache.
1030 num_callback_invocations_ = 0; 1030 num_callback_invocations_ = 0;
1031 TestGetFileFromCacheByResourceIdAndMd5( 1031 TestGetFileFromCacheByResourceIdAndMd5(
1032 resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, md5); 1032 resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, md5);
1033 EXPECT_EQ(1, num_callback_invocations_); 1033 EXPECT_EQ(1, num_callback_invocations_);
1034 1034
1035 // Store an existing file to the previously pinned non-existent file. 1035 // Store an existing file to the previously pinned non-existent file.
1036 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1036 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1037 GDATA_FILE_OK, 1037 GDATA_FILE_OK,
1038 test_util::TEST_CACHE_STATE_PRESENT | 1038 test_util::TEST_CACHE_STATE_PRESENT |
1039 test_util::TEST_CACHE_STATE_PINNED | 1039 test_util::TEST_CACHE_STATE_PINNED |
1040 test_util::TEST_CACHE_STATE_PERSISTENT, 1040 test_util::TEST_CACHE_STATE_PERSISTENT,
1041 GDataCache::CACHE_TYPE_PERSISTENT); 1041 DriveCache::CACHE_TYPE_PERSISTENT);
1042 1042
1043 // Get the previously pinned and stored file from cache. 1043 // Get the previously pinned and stored file from cache.
1044 num_callback_invocations_ = 0; 1044 num_callback_invocations_ = 0;
1045 TestGetFileFromCacheByResourceIdAndMd5( 1045 TestGetFileFromCacheByResourceIdAndMd5(
1046 resource_id, md5, GDATA_FILE_OK, md5); 1046 resource_id, md5, GDATA_FILE_OK, md5);
1047 EXPECT_EQ(1, num_callback_invocations_); 1047 EXPECT_EQ(1, num_callback_invocations_);
1048 } 1048 }
1049 1049
1050 TEST_F(GDataCacheTest, RemoveFromCachePinned) { 1050 TEST_F(DriveCacheTest, RemoveFromCachePinned) {
1051 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1051 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1052 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1052 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1053 1053
1054 // Use alphanumeric characters for resource_id. 1054 // Use alphanumeric characters for resource_id.
1055 std::string resource_id("pdf:1a2b"); 1055 std::string resource_id("pdf:1a2b");
1056 std::string md5("abcdef0123456789"); 1056 std::string md5("abcdef0123456789");
1057 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1057 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1058 1058
1059 // Store a file to cache, and pin it. 1059 // Store a file to cache, and pin it.
1060 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1060 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1061 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1061 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1062 GDataCache::CACHE_TYPE_TMP); 1062 DriveCache::CACHE_TYPE_TMP);
1063 TestPin(resource_id, md5, GDATA_FILE_OK, 1063 TestPin(resource_id, md5, GDATA_FILE_OK,
1064 test_util::TEST_CACHE_STATE_PRESENT | 1064 test_util::TEST_CACHE_STATE_PRESENT |
1065 test_util::TEST_CACHE_STATE_PINNED | 1065 test_util::TEST_CACHE_STATE_PINNED |
1066 test_util::TEST_CACHE_STATE_PERSISTENT, 1066 test_util::TEST_CACHE_STATE_PERSISTENT,
1067 GDataCache::CACHE_TYPE_PERSISTENT); 1067 DriveCache::CACHE_TYPE_PERSISTENT);
1068 1068
1069 // Remove |resource_id| from cache. 1069 // Remove |resource_id| from cache.
1070 num_callback_invocations_ = 0; 1070 num_callback_invocations_ = 0;
1071 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 1071 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
1072 EXPECT_EQ(1, num_callback_invocations_); 1072 EXPECT_EQ(1, num_callback_invocations_);
1073 1073
1074 // Repeat using non-alphanumeric characters for resource id, including '.' 1074 // Repeat using non-alphanumeric characters for resource id, including '.'
1075 // which is an extension separator. 1075 // which is an extension separator.
1076 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; 1076 resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?";
1077 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1077 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1078 1078
1079 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1079 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1080 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1080 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1081 GDataCache::CACHE_TYPE_TMP); 1081 DriveCache::CACHE_TYPE_TMP);
1082 TestPin(resource_id, md5, GDATA_FILE_OK, 1082 TestPin(resource_id, md5, GDATA_FILE_OK,
1083 test_util::TEST_CACHE_STATE_PRESENT | 1083 test_util::TEST_CACHE_STATE_PRESENT |
1084 test_util::TEST_CACHE_STATE_PINNED | 1084 test_util::TEST_CACHE_STATE_PINNED |
1085 test_util::TEST_CACHE_STATE_PERSISTENT, 1085 test_util::TEST_CACHE_STATE_PERSISTENT,
1086 GDataCache::CACHE_TYPE_PERSISTENT); 1086 DriveCache::CACHE_TYPE_PERSISTENT);
1087 1087
1088 num_callback_invocations_ = 0; 1088 num_callback_invocations_ = 0;
1089 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 1089 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
1090 EXPECT_EQ(1, num_callback_invocations_); 1090 EXPECT_EQ(1, num_callback_invocations_);
1091 } 1091 }
1092 1092
1093 TEST_F(GDataCacheTest, DirtyCacheSimple) { 1093 TEST_F(DriveCacheTest, DirtyCacheSimple) {
1094 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1094 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1095 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1095 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1096 1096
1097 std::string resource_id("pdf:1a2b"); 1097 std::string resource_id("pdf:1a2b");
1098 std::string md5("abcdef0123456789"); 1098 std::string md5("abcdef0123456789");
1099 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); 1099 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1);
1100 1100
1101 // First store a file to cache. 1101 // First store a file to cache.
1102 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1102 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1103 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1103 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1104 GDataCache::CACHE_TYPE_TMP); 1104 DriveCache::CACHE_TYPE_TMP);
1105 1105
1106 // Mark the file dirty. 1106 // Mark the file dirty.
1107 num_callback_invocations_ = 0; 1107 num_callback_invocations_ = 0;
1108 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1108 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1109 test_util::TEST_CACHE_STATE_PRESENT | 1109 test_util::TEST_CACHE_STATE_PRESENT |
1110 test_util::TEST_CACHE_STATE_DIRTY | 1110 test_util::TEST_CACHE_STATE_DIRTY |
1111 test_util::TEST_CACHE_STATE_PERSISTENT, 1111 test_util::TEST_CACHE_STATE_PERSISTENT,
1112 GDataCache::CACHE_TYPE_PERSISTENT); 1112 DriveCache::CACHE_TYPE_PERSISTENT);
1113 EXPECT_EQ(1, num_callback_invocations_); 1113 EXPECT_EQ(1, num_callback_invocations_);
1114 1114
1115 // Commit the file dirty. 1115 // Commit the file dirty.
1116 num_callback_invocations_ = 0; 1116 num_callback_invocations_ = 0;
1117 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1117 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1118 test_util::TEST_CACHE_STATE_PRESENT | 1118 test_util::TEST_CACHE_STATE_PRESENT |
1119 test_util::TEST_CACHE_STATE_DIRTY | 1119 test_util::TEST_CACHE_STATE_DIRTY |
1120 test_util::TEST_CACHE_STATE_PERSISTENT, 1120 test_util::TEST_CACHE_STATE_PERSISTENT,
1121 GDataCache::CACHE_TYPE_PERSISTENT); 1121 DriveCache::CACHE_TYPE_PERSISTENT);
1122 EXPECT_EQ(1, num_callback_invocations_); 1122 EXPECT_EQ(1, num_callback_invocations_);
1123 1123
1124 // Clear dirty state of the file. 1124 // Clear dirty state of the file.
1125 num_callback_invocations_ = 0; 1125 num_callback_invocations_ = 0;
1126 TestClearDirty(resource_id, md5, GDATA_FILE_OK, 1126 TestClearDirty(resource_id, md5, GDATA_FILE_OK,
1127 test_util::TEST_CACHE_STATE_PRESENT, 1127 test_util::TEST_CACHE_STATE_PRESENT,
1128 GDataCache::CACHE_TYPE_TMP); 1128 DriveCache::CACHE_TYPE_TMP);
1129 EXPECT_EQ(1, num_callback_invocations_); 1129 EXPECT_EQ(1, num_callback_invocations_);
1130 } 1130 }
1131 1131
1132 TEST_F(GDataCacheTest, DirtyCachePinned) { 1132 TEST_F(DriveCacheTest, DirtyCachePinned) {
1133 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1133 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1134 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1134 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1135 1135
1136 std::string resource_id("pdf:1a2b"); 1136 std::string resource_id("pdf:1a2b");
1137 std::string md5("abcdef0123456789"); 1137 std::string md5("abcdef0123456789");
1138 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1138 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1139 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); 1139 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1);
1140 1140
1141 // First store a file to cache and pin it. 1141 // First store a file to cache and pin it.
1142 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1142 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1143 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1143 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1144 GDataCache::CACHE_TYPE_TMP); 1144 DriveCache::CACHE_TYPE_TMP);
1145 TestPin(resource_id, md5, GDATA_FILE_OK, 1145 TestPin(resource_id, md5, GDATA_FILE_OK,
1146 test_util::TEST_CACHE_STATE_PRESENT | 1146 test_util::TEST_CACHE_STATE_PRESENT |
1147 test_util::TEST_CACHE_STATE_PINNED | 1147 test_util::TEST_CACHE_STATE_PINNED |
1148 test_util::TEST_CACHE_STATE_PERSISTENT, 1148 test_util::TEST_CACHE_STATE_PERSISTENT,
1149 GDataCache::CACHE_TYPE_PERSISTENT); 1149 DriveCache::CACHE_TYPE_PERSISTENT);
1150 1150
1151 // Mark the file dirty. 1151 // Mark the file dirty.
1152 num_callback_invocations_ = 0; 1152 num_callback_invocations_ = 0;
1153 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1153 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1154 test_util::TEST_CACHE_STATE_PRESENT | 1154 test_util::TEST_CACHE_STATE_PRESENT |
1155 test_util::TEST_CACHE_STATE_DIRTY | 1155 test_util::TEST_CACHE_STATE_DIRTY |
1156 test_util::TEST_CACHE_STATE_PINNED | 1156 test_util::TEST_CACHE_STATE_PINNED |
1157 test_util::TEST_CACHE_STATE_PERSISTENT, 1157 test_util::TEST_CACHE_STATE_PERSISTENT,
1158 GDataCache::CACHE_TYPE_PERSISTENT); 1158 DriveCache::CACHE_TYPE_PERSISTENT);
1159 EXPECT_EQ(1, num_callback_invocations_); 1159 EXPECT_EQ(1, num_callback_invocations_);
1160 1160
1161 // Commit the file dirty. 1161 // Commit the file dirty.
1162 num_callback_invocations_ = 0; 1162 num_callback_invocations_ = 0;
1163 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1163 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1164 test_util::TEST_CACHE_STATE_PRESENT | 1164 test_util::TEST_CACHE_STATE_PRESENT |
1165 test_util::TEST_CACHE_STATE_DIRTY | 1165 test_util::TEST_CACHE_STATE_DIRTY |
1166 test_util::TEST_CACHE_STATE_PINNED | 1166 test_util::TEST_CACHE_STATE_PINNED |
1167 test_util::TEST_CACHE_STATE_PERSISTENT, 1167 test_util::TEST_CACHE_STATE_PERSISTENT,
1168 GDataCache::CACHE_TYPE_PERSISTENT); 1168 DriveCache::CACHE_TYPE_PERSISTENT);
1169 EXPECT_EQ(1, num_callback_invocations_); 1169 EXPECT_EQ(1, num_callback_invocations_);
1170 1170
1171 // Clear dirty state of the file. 1171 // Clear dirty state of the file.
1172 num_callback_invocations_ = 0; 1172 num_callback_invocations_ = 0;
1173 TestClearDirty(resource_id, md5, GDATA_FILE_OK, 1173 TestClearDirty(resource_id, md5, GDATA_FILE_OK,
1174 test_util::TEST_CACHE_STATE_PRESENT | 1174 test_util::TEST_CACHE_STATE_PRESENT |
1175 test_util::TEST_CACHE_STATE_PINNED | 1175 test_util::TEST_CACHE_STATE_PINNED |
1176 test_util::TEST_CACHE_STATE_PERSISTENT, 1176 test_util::TEST_CACHE_STATE_PERSISTENT,
1177 GDataCache::CACHE_TYPE_PERSISTENT); 1177 DriveCache::CACHE_TYPE_PERSISTENT);
1178 EXPECT_EQ(1, num_callback_invocations_); 1178 EXPECT_EQ(1, num_callback_invocations_);
1179 } 1179 }
1180 1180
1181 // Test is disabled because it is flaky (http://crbug.com/134146) 1181 // Test is disabled because it is flaky (http://crbug.com/134146)
1182 TEST_F(GDataCacheTest, PinAndUnpinDirtyCache) { 1182 TEST_F(DriveCacheTest, PinAndUnpinDirtyCache) {
1183 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1183 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1184 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1184 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1185 1185
1186 std::string resource_id("pdf:1a2b"); 1186 std::string resource_id("pdf:1a2b");
1187 std::string md5("abcdef0123456789"); 1187 std::string md5("abcdef0123456789");
1188 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1188 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1189 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5)) 1189 EXPECT_CALL(*mock_cache_observer_, OnCacheUnpinned(resource_id, md5))
1190 .Times(1); 1190 .Times(1);
1191 1191
1192 // First store a file to cache and mark it as dirty. 1192 // First store a file to cache and mark it as dirty.
1193 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1193 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1194 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1194 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1195 GDataCache::CACHE_TYPE_TMP); 1195 DriveCache::CACHE_TYPE_TMP);
1196 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1196 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1197 test_util::TEST_CACHE_STATE_PRESENT | 1197 test_util::TEST_CACHE_STATE_PRESENT |
1198 test_util::TEST_CACHE_STATE_DIRTY | 1198 test_util::TEST_CACHE_STATE_DIRTY |
1199 test_util::TEST_CACHE_STATE_PERSISTENT, 1199 test_util::TEST_CACHE_STATE_PERSISTENT,
1200 GDataCache::CACHE_TYPE_PERSISTENT); 1200 DriveCache::CACHE_TYPE_PERSISTENT);
1201 1201
1202 // Verifies dirty file exists. 1202 // Verifies dirty file exists.
1203 FilePath dirty_path = GetCacheFilePath( 1203 FilePath dirty_path = GetCacheFilePath(
1204 resource_id, 1204 resource_id,
1205 md5, 1205 md5,
1206 GDataCache::CACHE_TYPE_PERSISTENT, 1206 DriveCache::CACHE_TYPE_PERSISTENT,
1207 GDataCache::CACHED_FILE_LOCALLY_MODIFIED); 1207 DriveCache::CACHED_FILE_LOCALLY_MODIFIED);
1208 EXPECT_TRUE(file_util::PathExists(dirty_path)); 1208 EXPECT_TRUE(file_util::PathExists(dirty_path));
1209 1209
1210 // Pin the dirty file. 1210 // Pin the dirty file.
1211 TestPin(resource_id, md5, GDATA_FILE_OK, 1211 TestPin(resource_id, md5, GDATA_FILE_OK,
1212 test_util::TEST_CACHE_STATE_PRESENT | 1212 test_util::TEST_CACHE_STATE_PRESENT |
1213 test_util::TEST_CACHE_STATE_DIRTY | 1213 test_util::TEST_CACHE_STATE_DIRTY |
1214 test_util::TEST_CACHE_STATE_PINNED | 1214 test_util::TEST_CACHE_STATE_PINNED |
1215 test_util::TEST_CACHE_STATE_PERSISTENT, 1215 test_util::TEST_CACHE_STATE_PERSISTENT,
1216 GDataCache::CACHE_TYPE_PERSISTENT); 1216 DriveCache::CACHE_TYPE_PERSISTENT);
1217 1217
1218 // Verify dirty file still exist at the same pathname. 1218 // Verify dirty file still exist at the same pathname.
1219 EXPECT_TRUE(file_util::PathExists(dirty_path)); 1219 EXPECT_TRUE(file_util::PathExists(dirty_path));
1220 1220
1221 // Unpin the dirty file. 1221 // Unpin the dirty file.
1222 TestUnpin(resource_id, md5, GDATA_FILE_OK, 1222 TestUnpin(resource_id, md5, GDATA_FILE_OK,
1223 test_util::TEST_CACHE_STATE_PRESENT | 1223 test_util::TEST_CACHE_STATE_PRESENT |
1224 test_util::TEST_CACHE_STATE_DIRTY | 1224 test_util::TEST_CACHE_STATE_DIRTY |
1225 test_util::TEST_CACHE_STATE_PERSISTENT, 1225 test_util::TEST_CACHE_STATE_PERSISTENT,
1226 GDataCache::CACHE_TYPE_PERSISTENT); 1226 DriveCache::CACHE_TYPE_PERSISTENT);
1227 1227
1228 // Verify dirty file still exist at the same pathname. 1228 // Verify dirty file still exist at the same pathname.
1229 EXPECT_TRUE(file_util::PathExists(dirty_path)); 1229 EXPECT_TRUE(file_util::PathExists(dirty_path));
1230 } 1230 }
1231 1231
1232 TEST_F(GDataCacheTest, DirtyCacheRepetitive) { 1232 TEST_F(DriveCacheTest, DirtyCacheRepetitive) {
1233 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1233 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1234 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1234 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1235 1235
1236 std::string resource_id("pdf:1a2b"); 1236 std::string resource_id("pdf:1a2b");
1237 std::string md5("abcdef0123456789"); 1237 std::string md5("abcdef0123456789");
1238 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(3); 1238 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(3);
1239 1239
1240 // First store a file to cache. 1240 // First store a file to cache.
1241 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1241 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1242 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1242 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1243 GDataCache::CACHE_TYPE_TMP); 1243 DriveCache::CACHE_TYPE_TMP);
1244 1244
1245 // Mark the file dirty. 1245 // Mark the file dirty.
1246 num_callback_invocations_ = 0; 1246 num_callback_invocations_ = 0;
1247 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1247 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1248 test_util::TEST_CACHE_STATE_PRESENT | 1248 test_util::TEST_CACHE_STATE_PRESENT |
1249 test_util::TEST_CACHE_STATE_DIRTY | 1249 test_util::TEST_CACHE_STATE_DIRTY |
1250 test_util::TEST_CACHE_STATE_PERSISTENT, 1250 test_util::TEST_CACHE_STATE_PERSISTENT,
1251 GDataCache::CACHE_TYPE_PERSISTENT); 1251 DriveCache::CACHE_TYPE_PERSISTENT);
1252 EXPECT_EQ(1, num_callback_invocations_); 1252 EXPECT_EQ(1, num_callback_invocations_);
1253 1253
1254 // Again, mark the file dirty. Nothing should change. 1254 // Again, mark the file dirty. Nothing should change.
1255 num_callback_invocations_ = 0; 1255 num_callback_invocations_ = 0;
1256 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1256 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1257 test_util::TEST_CACHE_STATE_PRESENT | 1257 test_util::TEST_CACHE_STATE_PRESENT |
1258 test_util::TEST_CACHE_STATE_DIRTY | 1258 test_util::TEST_CACHE_STATE_DIRTY |
1259 test_util::TEST_CACHE_STATE_PERSISTENT, 1259 test_util::TEST_CACHE_STATE_PERSISTENT,
1260 GDataCache::CACHE_TYPE_PERSISTENT); 1260 DriveCache::CACHE_TYPE_PERSISTENT);
1261 EXPECT_EQ(1, num_callback_invocations_); 1261 EXPECT_EQ(1, num_callback_invocations_);
1262 1262
1263 // Commit the file dirty. Outgoing symlink should be created. 1263 // Commit the file dirty. Outgoing symlink should be created.
1264 num_callback_invocations_ = 0; 1264 num_callback_invocations_ = 0;
1265 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1265 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1266 test_util::TEST_CACHE_STATE_PRESENT | 1266 test_util::TEST_CACHE_STATE_PRESENT |
1267 test_util::TEST_CACHE_STATE_DIRTY | 1267 test_util::TEST_CACHE_STATE_DIRTY |
1268 test_util::TEST_CACHE_STATE_PERSISTENT, 1268 test_util::TEST_CACHE_STATE_PERSISTENT,
1269 GDataCache::CACHE_TYPE_PERSISTENT); 1269 DriveCache::CACHE_TYPE_PERSISTENT);
1270 EXPECT_EQ(1, num_callback_invocations_); 1270 EXPECT_EQ(1, num_callback_invocations_);
1271 1271
1272 // Again, commit the file dirty. Nothing should change. 1272 // Again, commit the file dirty. Nothing should change.
1273 num_callback_invocations_ = 0; 1273 num_callback_invocations_ = 0;
1274 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1274 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1275 test_util::TEST_CACHE_STATE_PRESENT | 1275 test_util::TEST_CACHE_STATE_PRESENT |
1276 test_util::TEST_CACHE_STATE_DIRTY | 1276 test_util::TEST_CACHE_STATE_DIRTY |
1277 test_util::TEST_CACHE_STATE_PERSISTENT, 1277 test_util::TEST_CACHE_STATE_PERSISTENT,
1278 GDataCache::CACHE_TYPE_PERSISTENT); 1278 DriveCache::CACHE_TYPE_PERSISTENT);
1279 EXPECT_EQ(1, num_callback_invocations_); 1279 EXPECT_EQ(1, num_callback_invocations_);
1280 1280
1281 // Mark the file dirty agian after it's being committed. Outgoing symlink 1281 // Mark the file dirty agian after it's being committed. Outgoing symlink
1282 // should be deleted. 1282 // should be deleted.
1283 num_callback_invocations_ = 0; 1283 num_callback_invocations_ = 0;
1284 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1284 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1285 test_util::TEST_CACHE_STATE_PRESENT | 1285 test_util::TEST_CACHE_STATE_PRESENT |
1286 test_util::TEST_CACHE_STATE_DIRTY | 1286 test_util::TEST_CACHE_STATE_DIRTY |
1287 test_util::TEST_CACHE_STATE_PERSISTENT, 1287 test_util::TEST_CACHE_STATE_PERSISTENT,
1288 GDataCache::CACHE_TYPE_PERSISTENT); 1288 DriveCache::CACHE_TYPE_PERSISTENT);
1289 EXPECT_EQ(1, num_callback_invocations_); 1289 EXPECT_EQ(1, num_callback_invocations_);
1290 1290
1291 // Commit the file dirty. Outgoing symlink should be created again. 1291 // Commit the file dirty. Outgoing symlink should be created again.
1292 num_callback_invocations_ = 0; 1292 num_callback_invocations_ = 0;
1293 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1293 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1294 test_util::TEST_CACHE_STATE_PRESENT | 1294 test_util::TEST_CACHE_STATE_PRESENT |
1295 test_util::TEST_CACHE_STATE_DIRTY | 1295 test_util::TEST_CACHE_STATE_DIRTY |
1296 test_util::TEST_CACHE_STATE_PERSISTENT, 1296 test_util::TEST_CACHE_STATE_PERSISTENT,
1297 GDataCache::CACHE_TYPE_PERSISTENT); 1297 DriveCache::CACHE_TYPE_PERSISTENT);
1298 EXPECT_EQ(1, num_callback_invocations_); 1298 EXPECT_EQ(1, num_callback_invocations_);
1299 1299
1300 // Clear dirty state of the file. 1300 // Clear dirty state of the file.
1301 num_callback_invocations_ = 0; 1301 num_callback_invocations_ = 0;
1302 TestClearDirty(resource_id, md5, GDATA_FILE_OK, 1302 TestClearDirty(resource_id, md5, GDATA_FILE_OK,
1303 test_util::TEST_CACHE_STATE_PRESENT, 1303 test_util::TEST_CACHE_STATE_PRESENT,
1304 GDataCache::CACHE_TYPE_TMP); 1304 DriveCache::CACHE_TYPE_TMP);
1305 EXPECT_EQ(1, num_callback_invocations_); 1305 EXPECT_EQ(1, num_callback_invocations_);
1306 1306
1307 // Again, clear dirty state of the file, which is no longer dirty. 1307 // Again, clear dirty state of the file, which is no longer dirty.
1308 num_callback_invocations_ = 0; 1308 num_callback_invocations_ = 0;
1309 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION, 1309 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION,
1310 test_util::TEST_CACHE_STATE_PRESENT, 1310 test_util::TEST_CACHE_STATE_PRESENT,
1311 GDataCache::CACHE_TYPE_TMP); 1311 DriveCache::CACHE_TYPE_TMP);
1312 EXPECT_EQ(1, num_callback_invocations_); 1312 EXPECT_EQ(1, num_callback_invocations_);
1313 } 1313 }
1314 1314
1315 TEST_F(GDataCacheTest, DirtyCacheInvalid) { 1315 TEST_F(DriveCacheTest, DirtyCacheInvalid) {
1316 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1316 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1317 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1317 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1318 1318
1319 std::string resource_id("pdf:1a2b"); 1319 std::string resource_id("pdf:1a2b");
1320 std::string md5("abcdef0123456789"); 1320 std::string md5("abcdef0123456789");
1321 1321
1322 // Mark a non-existent file dirty. 1322 // Mark a non-existent file dirty.
1323 num_callback_invocations_ = 0; 1323 num_callback_invocations_ = 0;
1324 TestMarkDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, 1324 TestMarkDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND,
1325 test_util::TEST_CACHE_STATE_NONE, 1325 test_util::TEST_CACHE_STATE_NONE,
1326 GDataCache::CACHE_TYPE_TMP); 1326 DriveCache::CACHE_TYPE_TMP);
1327 EXPECT_EQ(1, num_callback_invocations_); 1327 EXPECT_EQ(1, num_callback_invocations_);
1328 1328
1329 // Commit a non-existent file dirty. 1329 // Commit a non-existent file dirty.
1330 num_callback_invocations_ = 0; 1330 num_callback_invocations_ = 0;
1331 TestCommitDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, 1331 TestCommitDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND,
1332 test_util::TEST_CACHE_STATE_NONE, 1332 test_util::TEST_CACHE_STATE_NONE,
1333 GDataCache::CACHE_TYPE_TMP); 1333 DriveCache::CACHE_TYPE_TMP);
1334 EXPECT_EQ(1, num_callback_invocations_); 1334 EXPECT_EQ(1, num_callback_invocations_);
1335 1335
1336 // Clear dirty state of a non-existent file. 1336 // Clear dirty state of a non-existent file.
1337 num_callback_invocations_ = 0; 1337 num_callback_invocations_ = 0;
1338 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND, 1338 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_NOT_FOUND,
1339 test_util::TEST_CACHE_STATE_NONE, 1339 test_util::TEST_CACHE_STATE_NONE,
1340 GDataCache::CACHE_TYPE_TMP); 1340 DriveCache::CACHE_TYPE_TMP);
1341 EXPECT_EQ(1, num_callback_invocations_); 1341 EXPECT_EQ(1, num_callback_invocations_);
1342 1342
1343 // Store a file to cache. 1343 // Store a file to cache.
1344 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1344 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1345 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1345 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1346 GDataCache::CACHE_TYPE_TMP); 1346 DriveCache::CACHE_TYPE_TMP);
1347 1347
1348 // Commit a non-dirty existing file dirty. 1348 // Commit a non-dirty existing file dirty.
1349 num_callback_invocations_ = 0; 1349 num_callback_invocations_ = 0;
1350 TestCommitDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION, 1350 TestCommitDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION,
1351 test_util::TEST_CACHE_STATE_PRESENT, 1351 test_util::TEST_CACHE_STATE_PRESENT,
1352 GDataCache::CACHE_TYPE_TMP); 1352 DriveCache::CACHE_TYPE_TMP);
1353 EXPECT_EQ(1, num_callback_invocations_); 1353 EXPECT_EQ(1, num_callback_invocations_);
1354 1354
1355 // Clear dirty state of a non-dirty existing file. 1355 // Clear dirty state of a non-dirty existing file.
1356 num_callback_invocations_ = 0; 1356 num_callback_invocations_ = 0;
1357 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION, 1357 TestClearDirty(resource_id, md5, GDATA_FILE_ERROR_INVALID_OPERATION,
1358 test_util::TEST_CACHE_STATE_PRESENT, 1358 test_util::TEST_CACHE_STATE_PRESENT,
1359 GDataCache::CACHE_TYPE_TMP); 1359 DriveCache::CACHE_TYPE_TMP);
1360 EXPECT_EQ(1, num_callback_invocations_); 1360 EXPECT_EQ(1, num_callback_invocations_);
1361 1361
1362 // Mark an existing file dirty, then store a new file to the same resource id 1362 // Mark an existing file dirty, then store a new file to the same resource id
1363 // but different md5, which should fail. 1363 // but different md5, which should fail.
1364 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1364 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1365 test_util::TEST_CACHE_STATE_PRESENT | 1365 test_util::TEST_CACHE_STATE_PRESENT |
1366 test_util::TEST_CACHE_STATE_DIRTY | 1366 test_util::TEST_CACHE_STATE_DIRTY |
1367 test_util::TEST_CACHE_STATE_PERSISTENT, 1367 test_util::TEST_CACHE_STATE_PERSISTENT,
1368 GDataCache::CACHE_TYPE_PERSISTENT); 1368 DriveCache::CACHE_TYPE_PERSISTENT);
1369 num_callback_invocations_ = 0; 1369 num_callback_invocations_ = 0;
1370 md5 = "new_md5"; 1370 md5 = "new_md5";
1371 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"), 1371 TestStoreToCache(resource_id, md5, GetTestFilePath("subdir_feed.json"),
1372 GDATA_FILE_ERROR_IN_USE, 1372 GDATA_FILE_ERROR_IN_USE,
1373 test_util::TEST_CACHE_STATE_PRESENT | 1373 test_util::TEST_CACHE_STATE_PRESENT |
1374 test_util::TEST_CACHE_STATE_DIRTY | 1374 test_util::TEST_CACHE_STATE_DIRTY |
1375 test_util::TEST_CACHE_STATE_PERSISTENT, 1375 test_util::TEST_CACHE_STATE_PERSISTENT,
1376 GDataCache::CACHE_TYPE_PERSISTENT); 1376 DriveCache::CACHE_TYPE_PERSISTENT);
1377 EXPECT_EQ(1, num_callback_invocations_); 1377 EXPECT_EQ(1, num_callback_invocations_);
1378 } 1378 }
1379 1379
1380 TEST_F(GDataCacheTest, RemoveFromDirtyCache) { 1380 TEST_F(DriveCacheTest, RemoveFromDirtyCache) {
1381 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1381 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1382 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1382 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1383 1383
1384 std::string resource_id("pdf:1a2b"); 1384 std::string resource_id("pdf:1a2b");
1385 std::string md5("abcdef0123456789"); 1385 std::string md5("abcdef0123456789");
1386 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1); 1386 EXPECT_CALL(*mock_cache_observer_, OnCachePinned(resource_id, md5)).Times(1);
1387 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1); 1387 EXPECT_CALL(*mock_cache_observer_, OnCacheCommitted(resource_id)).Times(1);
1388 1388
1389 // Store a file to cache, pin it, mark it dirty and commit it. 1389 // Store a file to cache, pin it, mark it dirty and commit it.
1390 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1390 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1391 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1391 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1392 GDataCache::CACHE_TYPE_TMP); 1392 DriveCache::CACHE_TYPE_TMP);
1393 TestPin(resource_id, md5, GDATA_FILE_OK, 1393 TestPin(resource_id, md5, GDATA_FILE_OK,
1394 test_util::TEST_CACHE_STATE_PRESENT | 1394 test_util::TEST_CACHE_STATE_PRESENT |
1395 test_util::TEST_CACHE_STATE_PINNED | 1395 test_util::TEST_CACHE_STATE_PINNED |
1396 test_util::TEST_CACHE_STATE_PERSISTENT, 1396 test_util::TEST_CACHE_STATE_PERSISTENT,
1397 GDataCache::CACHE_TYPE_PERSISTENT); 1397 DriveCache::CACHE_TYPE_PERSISTENT);
1398 TestMarkDirty(resource_id, md5, GDATA_FILE_OK, 1398 TestMarkDirty(resource_id, md5, GDATA_FILE_OK,
1399 test_util::TEST_CACHE_STATE_PRESENT | 1399 test_util::TEST_CACHE_STATE_PRESENT |
1400 test_util::TEST_CACHE_STATE_PINNED | 1400 test_util::TEST_CACHE_STATE_PINNED |
1401 test_util::TEST_CACHE_STATE_DIRTY | 1401 test_util::TEST_CACHE_STATE_DIRTY |
1402 test_util::TEST_CACHE_STATE_PERSISTENT, 1402 test_util::TEST_CACHE_STATE_PERSISTENT,
1403 GDataCache::CACHE_TYPE_PERSISTENT); 1403 DriveCache::CACHE_TYPE_PERSISTENT);
1404 TestCommitDirty(resource_id, md5, GDATA_FILE_OK, 1404 TestCommitDirty(resource_id, md5, GDATA_FILE_OK,
1405 test_util::TEST_CACHE_STATE_PRESENT | 1405 test_util::TEST_CACHE_STATE_PRESENT |
1406 test_util::TEST_CACHE_STATE_PINNED | 1406 test_util::TEST_CACHE_STATE_PINNED |
1407 test_util::TEST_CACHE_STATE_DIRTY | 1407 test_util::TEST_CACHE_STATE_DIRTY |
1408 test_util::TEST_CACHE_STATE_PERSISTENT, 1408 test_util::TEST_CACHE_STATE_PERSISTENT,
1409 GDataCache::CACHE_TYPE_PERSISTENT); 1409 DriveCache::CACHE_TYPE_PERSISTENT);
1410 1410
1411 // Try to remove the file. Since file is dirty, it and the corresponding 1411 // Try to remove the file. Since file is dirty, it and the corresponding
1412 // pinned and outgoing symlinks should not be removed. 1412 // pinned and outgoing symlinks should not be removed.
1413 num_callback_invocations_ = 0; 1413 num_callback_invocations_ = 0;
1414 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 1414 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
1415 EXPECT_EQ(1, num_callback_invocations_); 1415 EXPECT_EQ(1, num_callback_invocations_);
1416 } 1416 }
1417 1417
1418 TEST_F(GDataCacheTest, MountUnmount) { 1418 TEST_F(DriveCacheTest, MountUnmount) {
1419 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1419 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1420 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1420 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1421 1421
1422 FilePath file_path; 1422 FilePath file_path;
1423 std::string resource_id("pdf:1a2b"); 1423 std::string resource_id("pdf:1a2b");
1424 std::string md5("abcdef0123456789"); 1424 std::string md5("abcdef0123456789");
1425 1425
1426 // First store a file to cache in the tmp subdir. 1426 // First store a file to cache in the tmp subdir.
1427 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1427 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1428 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1428 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1429 GDataCache::CACHE_TYPE_TMP); 1429 DriveCache::CACHE_TYPE_TMP);
1430 1430
1431 // Mark the file mounted. 1431 // Mark the file mounted.
1432 num_callback_invocations_ = 0; 1432 num_callback_invocations_ = 0;
1433 file_path = cache_->GetCacheFilePath(resource_id, md5, 1433 file_path = cache_->GetCacheFilePath(resource_id, md5,
1434 GDataCache::CACHE_TYPE_TMP, 1434 DriveCache::CACHE_TYPE_TMP,
1435 GDataCache::CACHED_FILE_FROM_SERVER); 1435 DriveCache::CACHED_FILE_FROM_SERVER);
1436 TestSetMountedState(resource_id, md5, file_path, true, 1436 TestSetMountedState(resource_id, md5, file_path, true,
1437 GDATA_FILE_OK, 1437 GDATA_FILE_OK,
1438 test_util::TEST_CACHE_STATE_PRESENT | 1438 test_util::TEST_CACHE_STATE_PRESENT |
1439 test_util::TEST_CACHE_STATE_MOUNTED | 1439 test_util::TEST_CACHE_STATE_MOUNTED |
1440 test_util::TEST_CACHE_STATE_PERSISTENT, 1440 test_util::TEST_CACHE_STATE_PERSISTENT,
1441 GDataCache::CACHE_TYPE_PERSISTENT); 1441 DriveCache::CACHE_TYPE_PERSISTENT);
1442 EXPECT_EQ(1, num_callback_invocations_); 1442 EXPECT_EQ(1, num_callback_invocations_);
1443 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); 1443 EXPECT_TRUE(CacheEntryExists(resource_id, md5));
1444 1444
1445 // Clear mounted state of the file. 1445 // Clear mounted state of the file.
1446 num_callback_invocations_ = 0; 1446 num_callback_invocations_ = 0;
1447 file_path = cache_->GetCacheFilePath(resource_id, 1447 file_path = cache_->GetCacheFilePath(resource_id,
1448 md5, 1448 md5,
1449 GDataCache::CACHE_TYPE_PERSISTENT, 1449 DriveCache::CACHE_TYPE_PERSISTENT,
1450 GDataCache::CACHED_FILE_MOUNTED); 1450 DriveCache::CACHED_FILE_MOUNTED);
1451 TestSetMountedState(resource_id, md5, file_path, false, 1451 TestSetMountedState(resource_id, md5, file_path, false,
1452 GDATA_FILE_OK, 1452 GDATA_FILE_OK,
1453 test_util::TEST_CACHE_STATE_PRESENT, 1453 test_util::TEST_CACHE_STATE_PRESENT,
1454 GDataCache::CACHE_TYPE_TMP); 1454 DriveCache::CACHE_TYPE_TMP);
1455 EXPECT_EQ(1, num_callback_invocations_); 1455 EXPECT_EQ(1, num_callback_invocations_);
1456 EXPECT_TRUE(CacheEntryExists(resource_id, md5)); 1456 EXPECT_TRUE(CacheEntryExists(resource_id, md5));
1457 1457
1458 // Try to remove the file. 1458 // Try to remove the file.
1459 num_callback_invocations_ = 0; 1459 num_callback_invocations_ = 0;
1460 TestRemoveFromCache(resource_id, GDATA_FILE_OK); 1460 TestRemoveFromCache(resource_id, GDATA_FILE_OK);
1461 EXPECT_EQ(1, num_callback_invocations_); 1461 EXPECT_EQ(1, num_callback_invocations_);
1462 } 1462 }
1463 1463
1464 TEST_F(GDataCacheTest, GetResourceIdsOfBacklogOnUIThread) { 1464 TEST_F(DriveCacheTest, GetResourceIdsOfBacklogOnUIThread) {
1465 PrepareForInitCacheTest(); 1465 PrepareForInitCacheTest();
1466 1466
1467 std::vector<std::string> to_fetch; 1467 std::vector<std::string> to_fetch;
1468 std::vector<std::string> to_upload; 1468 std::vector<std::string> to_upload;
1469 cache_->GetResourceIdsOfBacklogOnUIThread( 1469 cache_->GetResourceIdsOfBacklogOnUIThread(
1470 base::Bind(&OnGetResourceIdsOfBacklog, &to_fetch, &to_upload)); 1470 base::Bind(&OnGetResourceIdsOfBacklog, &to_fetch, &to_upload));
1471 test_util::RunBlockingPoolTask(); 1471 test_util::RunBlockingPoolTask();
1472 1472
1473 sort(to_fetch.begin(), to_fetch.end()); 1473 sort(to_fetch.begin(), to_fetch.end());
1474 ASSERT_EQ(1U, to_fetch.size()); 1474 ASSERT_EQ(1U, to_fetch.size());
1475 EXPECT_EQ("pinned:non-existent", to_fetch[0]); 1475 EXPECT_EQ("pinned:non-existent", to_fetch[0]);
1476 1476
1477 sort(to_upload.begin(), to_upload.end()); 1477 sort(to_upload.begin(), to_upload.end());
1478 ASSERT_EQ(2U, to_upload.size()); 1478 ASSERT_EQ(2U, to_upload.size());
1479 EXPECT_EQ("dirty:existing", to_upload[0]); 1479 EXPECT_EQ("dirty:existing", to_upload[0]);
1480 EXPECT_EQ("dirty_and_pinned:existing", to_upload[1]); 1480 EXPECT_EQ("dirty_and_pinned:existing", to_upload[1]);
1481 } 1481 }
1482 1482
1483 TEST_F(GDataCacheTest, GetResourceIdsOfExistingPinnedFilesOnUIThread) { 1483 TEST_F(DriveCacheTest, GetResourceIdsOfExistingPinnedFilesOnUIThread) {
1484 PrepareForInitCacheTest(); 1484 PrepareForInitCacheTest();
1485 1485
1486 std::vector<std::string> resource_ids; 1486 std::vector<std::string> resource_ids;
1487 cache_->GetResourceIdsOfExistingPinnedFilesOnUIThread( 1487 cache_->GetResourceIdsOfExistingPinnedFilesOnUIThread(
1488 base::Bind(&OnGetResourceIds, &resource_ids)); 1488 base::Bind(&OnGetResourceIds, &resource_ids));
1489 test_util::RunBlockingPoolTask(); 1489 test_util::RunBlockingPoolTask();
1490 1490
1491 sort(resource_ids.begin(), resource_ids.end()); 1491 sort(resource_ids.begin(), resource_ids.end());
1492 ASSERT_EQ(2U, resource_ids.size()); 1492 ASSERT_EQ(2U, resource_ids.size());
1493 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[0]); 1493 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[0]);
1494 EXPECT_EQ("pinned:existing", resource_ids[1]); 1494 EXPECT_EQ("pinned:existing", resource_ids[1]);
1495 } 1495 }
1496 1496
1497 TEST_F(GDataCacheTest, GetResourceIdsOfAllFilesOnUIThread) { 1497 TEST_F(DriveCacheTest, GetResourceIdsOfAllFilesOnUIThread) {
1498 PrepareForInitCacheTest(); 1498 PrepareForInitCacheTest();
1499 1499
1500 std::vector<std::string> resource_ids; 1500 std::vector<std::string> resource_ids;
1501 cache_->GetResourceIdsOfAllFilesOnUIThread( 1501 cache_->GetResourceIdsOfAllFilesOnUIThread(
1502 base::Bind(&OnGetResourceIds, &resource_ids)); 1502 base::Bind(&OnGetResourceIds, &resource_ids));
1503 test_util::RunBlockingPoolTask(); 1503 test_util::RunBlockingPoolTask();
1504 1504
1505 sort(resource_ids.begin(), resource_ids.end()); 1505 sort(resource_ids.begin(), resource_ids.end());
1506 ASSERT_EQ(6U, resource_ids.size()); 1506 ASSERT_EQ(6U, resource_ids.size());
1507 EXPECT_EQ("dirty:existing", resource_ids[0]); 1507 EXPECT_EQ("dirty:existing", resource_ids[0]);
1508 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]); 1508 EXPECT_EQ("dirty_and_pinned:existing", resource_ids[1]);
1509 EXPECT_EQ("pinned:existing", resource_ids[2]); 1509 EXPECT_EQ("pinned:existing", resource_ids[2]);
1510 EXPECT_EQ("pinned:non-existent", resource_ids[3]); 1510 EXPECT_EQ("pinned:non-existent", resource_ids[3]);
1511 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]); 1511 EXPECT_EQ("tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?", resource_ids[4]);
1512 EXPECT_EQ("tmp:resource_id", resource_ids[5]); 1512 EXPECT_EQ("tmp:resource_id", resource_ids[5]);
1513 } 1513 }
1514 1514
1515 1515
1516 TEST_F(GDataCacheTest, ClearAllOnUIThread) { 1516 TEST_F(DriveCacheTest, ClearAllOnUIThread) {
1517 PrepareForInitCacheTest(); 1517 PrepareForInitCacheTest();
1518 1518
1519 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1519 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1520 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace)); 1520 .Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
1521 1521
1522 std::string resource_id("pdf:1a2b"); 1522 std::string resource_id("pdf:1a2b");
1523 std::string md5("abcdef0123456789"); 1523 std::string md5("abcdef0123456789");
1524 1524
1525 // Store an existing file. 1525 // Store an existing file.
1526 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1526 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1527 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT, 1527 GDATA_FILE_OK, test_util::TEST_CACHE_STATE_PRESENT,
1528 GDataCache::CACHE_TYPE_TMP); 1528 DriveCache::CACHE_TYPE_TMP);
1529 EXPECT_EQ(1, num_callback_invocations_); 1529 EXPECT_EQ(1, num_callback_invocations_);
1530 1530
1531 // Verify that there's only one cached file. 1531 // Verify that there's only one cached file.
1532 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5)); 1532 EXPECT_EQ(1U, CountCacheFiles(resource_id, md5));
1533 1533
1534 // Clear cache. 1534 // Clear cache.
1535 GDataFileError error = GDATA_FILE_OK; 1535 GDataFileError error = GDATA_FILE_OK;
1536 FilePath file_path; 1536 FilePath file_path;
1537 cache_->ClearAllOnUIThread(base::Bind(&OnClearAll, 1537 cache_->ClearAllOnUIThread(base::Bind(&OnClearAll,
1538 &error, 1538 &error,
1539 &file_path)); 1539 &file_path));
1540 test_util::RunBlockingPoolTask(); 1540 test_util::RunBlockingPoolTask();
1541 EXPECT_EQ(GDATA_FILE_OK, error); 1541 EXPECT_EQ(GDATA_FILE_OK, error);
1542 1542
1543 // Verify that all the cache is removed. 1543 // Verify that all the cache is removed.
1544 VerifyRemoveFromCache(error, resource_id, md5); 1544 VerifyRemoveFromCache(error, resource_id, md5);
1545 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); 1545 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5));
1546 } 1546 }
1547 1547
1548 TEST_F(GDataCacheTest, StoreToCacheNoSpace) { 1548 TEST_F(DriveCacheTest, StoreToCacheNoSpace) {
1549 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace()) 1549 EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
1550 .Times(AtLeast(1)).WillRepeatedly(Return(0)); 1550 .Times(AtLeast(1)).WillRepeatedly(Return(0));
1551 1551
1552 std::string resource_id("pdf:1a2b"); 1552 std::string resource_id("pdf:1a2b");
1553 std::string md5("abcdef0123456789"); 1553 std::string md5("abcdef0123456789");
1554 1554
1555 // Try to store an existing file. 1555 // Try to store an existing file.
1556 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), 1556 TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"),
1557 GDATA_FILE_ERROR_NO_SPACE, 1557 GDATA_FILE_ERROR_NO_SPACE,
1558 test_util::TEST_CACHE_STATE_NONE, 1558 test_util::TEST_CACHE_STATE_NONE,
1559 GDataCache::CACHE_TYPE_TMP); 1559 DriveCache::CACHE_TYPE_TMP);
1560 EXPECT_EQ(1, num_callback_invocations_); 1560 EXPECT_EQ(1, num_callback_invocations_);
1561 1561
1562 // Verify that there's no files added. 1562 // Verify that there's no files added.
1563 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5)); 1563 EXPECT_EQ(0U, CountCacheFiles(resource_id, md5));
1564 } 1564 }
1565 1565
1566 1566
1567 } // namespace gdata 1567 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698