Index: chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
index 2220f2331d6c9cb7d9f378d0ceb3880460d35eb6..aaa925ac06b6701673f0ec1a3710669119dbfb8d 100644 |
--- a/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
+++ b/chrome/browser/chromeos/gdata/gdata_file_system_unittest.cc |
@@ -24,6 +24,7 @@ |
#include "chrome/browser/chromeos/gdata/gdata.pb.h" |
#include "chrome/browser/chromeos/gdata/gdata_file_system.h" |
#include "chrome/browser/chromeos/gdata/gdata_parser.h" |
+#include "chrome/browser/chromeos/gdata/gdata_util.h" |
#include "chrome/browser/chromeos/gdata/mock_directory_change_observer.h" |
#include "chrome/browser/chromeos/gdata/mock_gdata_documents_service.h" |
#include "chrome/browser/chromeos/gdata/mock_gdata_sync_client.h" |
@@ -51,8 +52,6 @@ using content::BrowserThread; |
namespace { |
-const char kSlash[] = "/"; |
-const char kEscapedSlash[] = "\xE2\x88\x95"; |
const char kSymLinkToDevNull[] = "/dev/null"; |
struct InitialCacheResource { |
@@ -322,10 +321,10 @@ class GDataFileSystemTest : public testing::Test { |
FilePath base_name = actual_path.BaseName(); |
// FilePath::Extension returns ".", so strip it. |
- std::string unescaped_md5 = GDataEntry::UnescapeUtf8FileName( |
+ std::string unescaped_md5 = util::UnescapeCacheFileName( |
base_name.Extension().substr(1)); |
EXPECT_EQ(md5, unescaped_md5); |
- std::string unescaped_resource_id = GDataEntry::UnescapeUtf8FileName( |
+ std::string unescaped_resource_id = util::UnescapeCacheFileName( |
base_name.RemoveExtension().value()); |
EXPECT_EQ(resource_id, unescaped_resource_id); |
} |
@@ -376,9 +375,9 @@ class GDataFileSystemTest : public testing::Test { |
if (error == base::PLATFORM_FILE_OK) { |
// Verify filename of |cache_file_path|. |
FilePath base_name = cache_file_path.BaseName(); |
- EXPECT_EQ(GDataEntry::EscapeUtf8FileName(resource_id) + |
+ EXPECT_EQ(util::EscapeCacheFileName(resource_id) + |
FilePath::kExtensionSeparator + |
- GDataEntry::EscapeUtf8FileName( |
+ util::EscapeCacheFileName( |
expected_file_extension_.empty() ? |
md5 : expected_file_extension_), |
base_name.value()); |
@@ -582,7 +581,7 @@ class GDataFileSystemTest : public testing::Test { |
// Verify filename of |cache_file_path|. |
if (error == base::PLATFORM_FILE_OK) { |
FilePath base_name = cache_file_path.BaseName(); |
- EXPECT_EQ(GDataEntry::EscapeUtf8FileName(resource_id) + |
+ EXPECT_EQ(util::EscapeCacheFileName(resource_id) + |
FilePath::kExtensionSeparator + |
"local", |
base_name.value()); |
@@ -627,6 +626,42 @@ class GDataFileSystemTest : public testing::Test { |
RunAllPendingForIO(); |
} |
+ void VerifySetMountedState(const std::string& resource_id, |
+ const std::string& md5, |
+ bool to_mount, |
+ base::PlatformFileError error, |
+ const FilePath& file_path) { |
+ ++num_callback_invocations_; |
+ EXPECT_TRUE(file_util::PathExists(file_path)); |
+ EXPECT_TRUE(file_path == file_system_->GetCacheFilePath( |
+ resource_id, |
+ md5, |
+ expected_sub_dir_type_, |
+ to_mount ? |
+ GDataFileSystemInterface::CACHED_FILE_MOUNTED : |
+ GDataFileSystemInterface::CACHED_FILE_FROM_SERVER)); |
+ } |
+ |
+ void TestSetMountedState( |
+ const std::string& resource_id, |
+ const std::string& md5, |
+ const FilePath& file_path, |
+ bool to_mount, |
+ base::PlatformFileError expected_error, |
+ int expected_cache_state, |
+ GDataRootDirectory::CacheSubDirectoryType expected_sub_dir_type) { |
+ expected_error_ = expected_error; |
+ expected_cache_state_ = expected_cache_state; |
+ expected_sub_dir_type_ = expected_sub_dir_type; |
+ expect_outgoing_symlink_ = false; |
+ |
+ file_system_->SetMountedState(file_path, to_mount, |
+ base::Bind(&GDataFileSystemTest::VerifySetMountedState, |
+ base::Unretained(this), resource_id, md5, to_mount)); |
+ |
+ RunAllPendingForIO(); |
+ } |
+ |
void PrepareForInitCacheTest() { |
// Create gdata cache sub directories. |
ASSERT_TRUE(file_util::CreateDirectory( |
@@ -1954,11 +1989,8 @@ TEST_F(GDataFileSystemTest, GetCacheFilePath) { |
// extension separator, to test that the characters are escaped and unescaped |
// correctly, and '.' doesn't mess up the filename format and operations. |
resource_id = "pdf:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?"; |
- std::string escaped_resource_id; |
- ReplaceChars(resource_id, kSlash, std::string(kEscapedSlash), |
- &escaped_resource_id); |
- std::string escaped_md5; |
- ReplaceChars(md5, kSlash, std::string(kEscapedSlash), &escaped_md5); |
+ std::string escaped_resource_id = util::EscapeCacheFileName(resource_id); |
+ std::string escaped_md5 = util::EscapeCacheFileName(md5); |
num_callback_invocations_ = 0; |
TestGetCacheFilePath(resource_id, md5, |
escaped_resource_id + FilePath::kExtensionSeparator + |
@@ -2009,9 +2041,9 @@ TEST_F(GDataFileSystemTest, StoreToCacheSimple) { |
for (FilePath current = enumerator.Next(); !current.empty(); |
current = enumerator.Next()) { |
++num_files_found; |
- EXPECT_EQ(GDataEntry::EscapeUtf8FileName(resource_id) + |
+ EXPECT_EQ(util::EscapeCacheFileName(resource_id) + |
FilePath::kExtensionSeparator + |
- GDataEntry::EscapeUtf8FileName(md5), |
+ util::EscapeCacheFileName(md5), |
current.BaseName().value()); |
} |
EXPECT_EQ(1U, num_files_found); |
@@ -2974,4 +3006,50 @@ TEST_F(GDataFileSystemTest, GetAvailableSpace) { |
EXPECT_TRUE(file_util::PathExists(path)); |
} |
+TEST_F(GDataFileSystemTest, MountUnmount) { |
+ EXPECT_CALL(*mock_sync_client_, OnCacheInitialized()).Times(1); |
+ |
+ FilePath file_path; |
+ std::string resource_id("pdf:1a2b"); |
+ std::string md5("abcdef0123456789"); |
+ |
+ // First store a file to cache in the tmp subdir. |
+ TestStoreToCache(resource_id, md5, GetTestFilePath("root_feed.json"), |
+ base::PLATFORM_FILE_OK, GDataFile::CACHE_STATE_PRESENT, |
+ GDataRootDirectory::CACHE_TYPE_TMP); |
+ |
+ // Mark the file mounted. |
+ num_callback_invocations_ = 0; |
+ file_path = file_system_->GetCacheFilePath( |
+ resource_id, md5, |
+ GDataRootDirectory::CACHE_TYPE_TMP, |
+ GDataFileSystemInterface::CACHED_FILE_FROM_SERVER); |
+ TestSetMountedState(resource_id, md5, file_path, true, |
+ base::PLATFORM_FILE_OK, |
+ GDataFile::CACHE_STATE_PRESENT | |
+ GDataFile::CACHE_STATE_MOUNTED, |
+ GDataRootDirectory::CACHE_TYPE_PERSISTENT); |
+ EXPECT_EQ(1, num_callback_invocations_); |
+ EXPECT_TRUE(CacheEntryExists(resource_id, md5)); |
+ |
+ // Clear mounted state of the file. |
+ num_callback_invocations_ = 0; |
+ file_path = file_system_->GetCacheFilePath( |
+ resource_id, |
+ md5, |
+ GDataRootDirectory::CACHE_TYPE_PERSISTENT, |
+ GDataFileSystemInterface::CACHED_FILE_MOUNTED); |
+ TestSetMountedState(resource_id, md5, file_path, false, |
+ base::PLATFORM_FILE_OK, |
+ GDataFile::CACHE_STATE_PRESENT, |
+ GDataRootDirectory::CACHE_TYPE_TMP); |
+ EXPECT_EQ(1, num_callback_invocations_); |
+ EXPECT_TRUE(CacheEntryExists(resource_id, md5)); |
+ |
+ // Try to remove the file. |
+ num_callback_invocations_ = 0; |
+ TestRemoveFromCache(resource_id, base::PLATFORM_FILE_OK); |
+ EXPECT_EQ(1, num_callback_invocations_); |
+} |
+ |
} // namespace gdata |