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

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

Issue 9742002: Wired GDataFileSystem::GetFile() method with internal cache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 years, 9 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 <errno.h> 5 #include <errno.h>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 GURL unused; 158 GURL unused;
159 return file_system_->UpdateDirectoryWithDocumentFeed( 159 return file_system_->UpdateDirectoryWithDocumentFeed(
160 list, FROM_SERVER) == base::PLATFORM_FILE_OK; 160 list, FROM_SERVER) == base::PLATFORM_FILE_OK;
161 } 161 }
162 162
163 bool RemoveFile(const FilePath& file_path) { 163 bool RemoveFile(const FilePath& file_path) {
164 return file_system_->RemoveFileFromFileSystem(file_path) == 164 return file_system_->RemoveFileFromFileSystem(file_path) ==
165 base::PLATFORM_FILE_OK; 165 base::PLATFORM_FILE_OK;
166 } 166 }
167 167
168 FilePath GetCachePathForFile(GDataFile* file) {
169 return file_system_->GetCacheFilePath(
170 file->resource_id(),
171 file->file_md5(),
172 GDataFileSystem::CACHE_TYPE_TMP,
173 GDataFileSystem::CACHED_FILE_FROM_SERVER);
174 }
175
168 GDataFileBase* FindFile(const FilePath& file_path) { 176 GDataFileBase* FindFile(const FilePath& file_path) {
169 ReadOnlyFindFileDelegate search_delegate; 177 ReadOnlyFindFileDelegate search_delegate;
170 file_system_->FindFileByPathSync(file_path, &search_delegate); 178 file_system_->FindFileByPathSync(file_path, &search_delegate);
171 return search_delegate.file(); 179 return search_delegate.file();
172 } 180 }
173 181
174 void FindAndTestFilePath(const FilePath& file_path) { 182 void FindAndTestFilePath(const FilePath& file_path) {
175 GDataFileBase* file = FindFile(file_path); 183 GDataFileBase* file = FindFile(file_path);
176 ASSERT_TRUE(file) << "File can't be found " << file_path.value(); 184 ASSERT_TRUE(file) << "File can't be found " << file_path.value();
177 EXPECT_EQ(file->GetFilePath(), file_path); 185 EXPECT_EQ(file->GetFilePath(), file_path);
178 } 186 }
179 187
180 GDataFileBase* FindFileByResource(const std::string& resource) { 188 GDataFileBase* FindFileByResource(const std::string& resource) {
181 return file_system_->root_->GetFileByResource(resource); 189 return file_system_->root_->GetFileByResource(resource);
182 } 190 }
183 191
184 void TestGetCacheFilePath(const std::string& res_id, const std::string& md5, 192 void TestGetCacheFilePath(const std::string& res_id, const std::string& md5,
185 const std::string& expected_filename) { 193 const std::string& expected_filename) {
186 FilePath actual_path = file_system_->GetCacheFilePath( 194 FilePath actual_path = file_system_->GetCacheFilePath(
187 res_id, 195 res_id,
188 md5, 196 md5,
189 GDataFileSystem::CACHE_TYPE_TMP, 197 GDataFileSystem::CACHE_TYPE_TMP,
190 false /* is_local */); 198 GDataFileSystem::CACHED_FILE_FROM_SERVER);
191 FilePath expected_path = 199 FilePath expected_path =
192 file_system_->cache_paths_[GDataFileSystem::CACHE_TYPE_TMP]; 200 file_system_->cache_paths_[GDataFileSystem::CACHE_TYPE_TMP];
193 expected_path = expected_path.Append(expected_filename); 201 expected_path = expected_path.Append(expected_filename);
194 EXPECT_EQ(expected_path, actual_path); 202 EXPECT_EQ(expected_path, actual_path);
195 203
196 FilePath base_name = actual_path.BaseName(); 204 FilePath base_name = actual_path.BaseName();
197 205
198 // FilePath::Extension returns ".", so strip it. 206 // FilePath::Extension returns ".", so strip it.
199 std::string unescaped_md5 = GDataFileBase::UnescapeUtf8FileName( 207 std::string unescaped_md5 = GDataFileBase::UnescapeUtf8FileName(
200 base_name.Extension().substr(1)); 208 base_name.Extension().substr(1));
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 EXPECT_EQ(expected_error_, error); 306 EXPECT_EQ(expected_error_, error);
299 307
300 // Verify cache map. 308 // Verify cache map.
301 EXPECT_FALSE(file_system_->root_->CacheFileExists(res_id, md5)); 309 EXPECT_FALSE(file_system_->root_->CacheFileExists(res_id, md5));
302 310
303 // Verify that no files with $res_id.* exist in dir. 311 // Verify that no files with $res_id.* exist in dir.
304 FilePath path = file_system_->GetCacheFilePath( 312 FilePath path = file_system_->GetCacheFilePath(
305 res_id, 313 res_id,
306 "*", 314 "*",
307 GDataFileSystem::CACHE_TYPE_TMP, 315 GDataFileSystem::CACHE_TYPE_TMP,
308 false /* is_local*/); 316 GDataFileSystem::CACHED_FILE_FROM_SERVER);
309 std::string all_res_id = res_id + FilePath::kExtensionSeparator + "*"; 317 std::string all_res_id = res_id + FilePath::kExtensionSeparator + "*";
310 file_util::FileEnumerator traversal(path.DirName(), false, 318 file_util::FileEnumerator traversal(path.DirName(), false,
311 file_util::FileEnumerator::FILES, 319 file_util::FileEnumerator::FILES,
312 all_res_id); 320 all_res_id);
313 EXPECT_TRUE(traversal.Next().empty()); 321 EXPECT_TRUE(traversal.Next().empty());
314 } 322 }
315 323
316 void TestPin(const std::string& res_id, const std::string& md5, 324 void TestPin(const std::string& res_id, const std::string& md5,
317 base::PlatformFileError expected_error) { 325 base::PlatformFileError expected_error) {
318 expected_error_ = expected_error; 326 expected_error_ = expected_error;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // Determine gdata cache blobs absolute path. 406 // Determine gdata cache blobs absolute path.
399 // Copy files from data dir to cache dir to act as cached files. 407 // Copy files from data dir to cache dir to act as cached files.
400 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(init_cache_table); ++i) { 408 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(init_cache_table); ++i) {
401 // Copy file from data dir to cache dir, naming it per cache files 409 // Copy file from data dir to cache dir, naming it per cache files
402 // convention. 410 // convention.
403 FilePath source_path = GetTestFilePath(init_cache_table[i].source); 411 FilePath source_path = GetTestFilePath(init_cache_table[i].source);
404 FilePath dest_path = file_system_->GetCacheFilePath( 412 FilePath dest_path = file_system_->GetCacheFilePath(
405 init_cache_table[i].resource, 413 init_cache_table[i].resource,
406 init_cache_table[i].md5, 414 init_cache_table[i].md5,
407 GDataFileSystem::CACHE_TYPE_TMP, 415 GDataFileSystem::CACHE_TYPE_TMP,
408 false /* is_local */); 416 GDataFileSystem::CACHED_FILE_FROM_SERVER);
409 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path)); 417 ASSERT_TRUE(file_util::CopyFile(source_path, dest_path));
410 418
411 // Change mode of cached file. 419 // Change mode of cached file.
412 struct stat64 stat_buf; 420 struct stat64 stat_buf;
413 ASSERT_FALSE(stat64(dest_path.value().c_str(), &stat_buf)); 421 ASSERT_FALSE(stat64(dest_path.value().c_str(), &stat_buf));
414 ASSERT_FALSE(chmod(dest_path.value().c_str(), 422 ASSERT_FALSE(chmod(dest_path.value().c_str(),
415 stat_buf.st_mode | 423 stat_buf.st_mode |
416 init_cache_table[i].mode_bits_to_enable)); 424 init_cache_table[i].mode_bits_to_enable));
417 } 425 }
418 } 426 }
(...skipping 20 matching lines...) Expand all
439 // Verify cache map. 447 // Verify cache map.
440 EXPECT_TRUE(file_system_->root_->CacheFileExists(res_id, md5)); 448 EXPECT_TRUE(file_system_->root_->CacheFileExists(res_id, md5));
441 EXPECT_EQ(expected_status_flags, 449 EXPECT_EQ(expected_status_flags,
442 file_system_->root_->GetCacheState(res_id, md5)); 450 file_system_->root_->GetCacheState(res_id, md5));
443 451
444 // Verify file attributes of actual cache file. 452 // Verify file attributes of actual cache file.
445 FilePath path = file_system_->GetCacheFilePath( 453 FilePath path = file_system_->GetCacheFilePath(
446 res_id, 454 res_id,
447 md5, 455 md5,
448 GDataFileSystem::CACHE_TYPE_TMP, 456 GDataFileSystem::CACHE_TYPE_TMP,
449 false /* is_local */); 457 GDataFileSystem::CACHED_FILE_FROM_SERVER);
450 struct stat64 stat_buf; 458 struct stat64 stat_buf;
451 EXPECT_EQ(0, stat64(path.value().c_str(), &stat_buf)); 459 EXPECT_EQ(0, stat64(path.value().c_str(), &stat_buf));
452 EXPECT_TRUE(stat_buf.st_mode & expected_mode_bits); 460 EXPECT_TRUE(stat_buf.st_mode & expected_mode_bits);
453 } 461 }
454 462
455 void RunAllPendingForCache() { 463 void RunAllPendingForCache() {
456 // Let cache operations run on IO blocking pool. 464 // Let cache operations run on IO blocking pool.
457 content::BrowserThread::GetBlockingPool()->FlushForTesting(); 465 content::BrowserThread::GetBlockingPool()->FlushForTesting();
458 // Let callbacks for cache operations run on UI thread. 466 // Let callbacks for cache operations run on UI thread.
459 message_loop_.RunAllPending(); 467 message_loop_.RunAllPending();
(...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after
1492 false, // is_exclusive 1500 false, // is_exclusive
1493 true, // is_recursive 1501 true, // is_recursive
1494 base::Bind(&CallbackHelper::FileOperationCallback, 1502 base::Bind(&CallbackHelper::FileOperationCallback,
1495 callback_helper_.get())); 1503 callback_helper_.get()));
1496 message_loop_.RunAllPending(); // Wait to get our result. 1504 message_loop_.RunAllPending(); // Wait to get our result.
1497 // TODO(gspencer): Uncomment this when we get a blob that 1505 // TODO(gspencer): Uncomment this when we get a blob that
1498 // works that can be returned from the mock. 1506 // works that can be returned from the mock.
1499 // EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_); 1507 // EXPECT_EQ(base::PLATFORM_FILE_OK, callback_helper_->last_error_);
1500 } 1508 }
1501 1509
1502 TEST_F(GDataFileSystemTest, GetFile) { 1510 TEST_F(GDataFileSystemTest, GetFileFromDownloads) {
1503 LoadRootFeedDocument("root_feed.json"); 1511 LoadRootFeedDocument("root_feed.json");
1504 1512
1505 GetFileCallback callback = 1513 GetFileCallback callback =
1506 base::Bind(&CallbackHelper::GetFileCallback, 1514 base::Bind(&CallbackHelper::GetFileCallback,
1507 callback_helper_.get()); 1515 callback_helper_.get());
1508 1516
1517 FilePath file_in_root(FILE_PATH_LITERAL("gdata/File 1.txt"));
1518 GDataFileBase* file_base = FindFile(file_in_root);
1519 GDataFile* file = file_base->AsGDataFile();
1520 FilePath downloaded_file = GetCachePathForFile(file);
1521
1509 EXPECT_CALL(*mock_doc_service_, 1522 EXPECT_CALL(*mock_doc_service_,
1510 DownloadFile(_, GURL("https://file_content_url/"), _)); 1523 DownloadFile(file_in_root,
1524 downloaded_file,
1525 GURL("https://file_content_url/"),
1526 _))
1527 .Times(1);
1511 1528
1512 FilePath file_in_root(FILE_PATH_LITERAL("gdata/File 1.txt"));
1513 file_system_->GetFile(file_in_root, callback); 1529 file_system_->GetFile(file_in_root, callback);
1514 message_loop_.RunAllPending(); // Wait to get our result. 1530 RunAllPendingForCache();
1531
1515 EXPECT_EQ(REGULAR_FILE, callback_helper_->file_type_); 1532 EXPECT_EQ(REGULAR_FILE, callback_helper_->file_type_);
1516 EXPECT_STREQ("file_content_url/", 1533 EXPECT_STREQ(downloaded_file.value().c_str(),
1517 callback_helper_->download_path_.value().c_str()); 1534 callback_helper_->download_path_.value().c_str());
1518 } 1535 }
1519 1536
1537 TEST_F(GDataFileSystemTest, GetFileFromCache) {
1538 LoadRootFeedDocument("root_feed.json");
1539
1540 GetFileCallback callback =
1541 base::Bind(&CallbackHelper::GetFileCallback,
1542 callback_helper_.get());
1543
1544 FilePath file_in_root(FILE_PATH_LITERAL("gdata/File 1.txt"));
1545 GDataFileBase* file_base = FindFile(file_in_root);
1546 GDataFile* file = file_base->AsGDataFile();
1547 FilePath downloaded_file = GetCachePathForFile(file);
1548
1549 // Store something as cached version of this file.
1550 TestStoreToCache(file->resource_id(),
1551 file->file_md5(),
1552 GetTestFilePath("root_feed.json"),
1553 base::PLATFORM_FILE_OK);
1554
1555 // Make sure we don't call downloads at all.
1556 EXPECT_CALL(*mock_doc_service_,
1557 DownloadFile(file_in_root,
1558 downloaded_file,
1559 GURL("https://file_content_url/"),
1560 _))
1561 .Times(0);
1562
1563 file_system_->GetFile(file_in_root, callback);
1564 RunAllPendingForCache();
1565
1566 EXPECT_EQ(REGULAR_FILE, callback_helper_->file_type_);
1567 EXPECT_STREQ(downloaded_file.value().c_str(),
1568 callback_helper_->download_path_.value().c_str());
1569 }
1570
1520 TEST_F(GDataFileSystemTest, GetFileForHostedDocument) { 1571 TEST_F(GDataFileSystemTest, GetFileForHostedDocument) {
1521 LoadRootFeedDocument("root_feed.json"); 1572 LoadRootFeedDocument("root_feed.json");
1522 1573
1523 GetFileCallback callback = 1574 GetFileCallback callback =
1524 base::Bind(&CallbackHelper::GetFileCallback, 1575 base::Bind(&CallbackHelper::GetFileCallback,
1525 callback_helper_.get()); 1576 callback_helper_.get());
1526 1577
1527 FilePath file_in_root(FILE_PATH_LITERAL("gdata/Document 1.gdoc")); 1578 FilePath file_in_root(FILE_PATH_LITERAL("gdata/Document 1.gdoc"));
1528 GDataFileBase* file = NULL; 1579 GDataFileBase* file = NULL;
1529 EXPECT_TRUE((file = FindFile(file_in_root)) != NULL); 1580 EXPECT_TRUE((file = FindFile(file_in_root)) != NULL);
(...skipping 28 matching lines...) Expand all
1558 1609
1559 EXPECT_CALL(*mock_doc_service_, GetAccountMetadata(_)); 1610 EXPECT_CALL(*mock_doc_service_, GetAccountMetadata(_));
1560 1611
1561 file_system_->GetAvailableSpace(callback); 1612 file_system_->GetAvailableSpace(callback);
1562 message_loop_.RunAllPending(); // Wait to get our result. 1613 message_loop_.RunAllPending(); // Wait to get our result.
1563 EXPECT_EQ(1234, callback_helper_->quota_bytes_used_); 1614 EXPECT_EQ(1234, callback_helper_->quota_bytes_used_);
1564 EXPECT_EQ(12345, callback_helper_->quota_bytes_total_); 1615 EXPECT_EQ(12345, callback_helper_->quota_bytes_total_);
1565 } 1616 }
1566 1617
1567 } // namespace gdata 1618 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_file_system_proxy.cc ('k') | chrome/browser/chromeos/gdata/gdata_operations.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698