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

Unified Diff: chrome/browser/chromeos/drive/drive_cache_unittest.cc

Issue 11275303: chromeos: Stop creating symlinks in DriveCacheTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: _ Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/drive/drive_cache_unittest.cc
diff --git a/chrome/browser/chromeos/drive/drive_cache_unittest.cc b/chrome/browser/chromeos/drive/drive_cache_unittest.cc
index 703196c891078ddc04d1175824183b85a3e6bef7..ed06e3a5f79c997ce2abf7d9c50712cdeb4cb7d0 100644
--- a/chrome/browser/chromeos/drive/drive_cache_unittest.cc
+++ b/chrome/browser/chromeos/drive/drive_cache_unittest.cc
@@ -31,54 +31,31 @@ namespace {
const char kSymLinkToDevNull[] = "/dev/null";
-struct InitialCacheResource {
- const char* source_file; // Source file to be used for cache.
- const char* resource_id; // Resource id of cache file.
- const char* md5; // MD5 of cache file.
- int cache_state; // Cache state of cache file.
- const char* expected_file_extension; // Expected extension of cached file.
- // Expected CacheSubDirectoryType of cached file.
- DriveCache::CacheSubDirectoryType expected_sub_dir_type;
-} const initial_cache_resources[] = {
+struct TestCacheResource {
+ const char* source_file;
+ const char* resource_id;
+ const char* md5;
+ bool is_pinned;
+ bool is_dirty;
+} const test_cache_resources[] = {
// Cache resource in tmp dir, i.e. not pinned or dirty.
{ "gdata/root_feed.json", "tmp:resource_id", "md5_tmp_alphanumeric",
- test_util::TEST_CACHE_STATE_PRESENT,
- "md5_tmp_alphanumeric", DriveCache::CACHE_TYPE_TMP },
+ false, false },
// Cache resource in tmp dir, i.e. not pinned or dirty, with resource_id
- // containing non-alphanumeric characters, to test resource_id is escaped and
- // unescaped correctly.
+ // containing non-alphanumeric characters.
{ "gdata/subdir_feed.json", "tmp:`~!@#$%^&*()-_=+[{|]}\\;',<.>/?",
- "md5_tmp_non_alphanumeric",
- test_util::TEST_CACHE_STATE_PRESENT,
- "md5_tmp_non_alphanumeric", DriveCache::CACHE_TYPE_TMP },
- // Cache resource that is pinned, to test a pinned file is in persistent dir
- // with a symlink in pinned dir referencing it.
+ "md5_tmp_non_alphanumeric", false, false },
+ // Cache resource that is pinned and persistent.
{ "gdata/directory_entry_atom.json", "pinned:existing", "md5_pinned_existing",
- test_util::TEST_CACHE_STATE_PRESENT |
- test_util::TEST_CACHE_STATE_PINNED |
- test_util::TEST_CACHE_STATE_PERSISTENT,
- "md5_pinned_existing", DriveCache::CACHE_TYPE_PERSISTENT },
- // Cache resource with a non-existent source file that is pinned, to test that
- // a pinned file can reference a non-existent file.
- { "", "pinned:non-existent", "md5_pinned_non_existent",
- test_util::TEST_CACHE_STATE_PINNED,
- "md5_pinned_non_existent", DriveCache::CACHE_TYPE_TMP },
- // Cache resource that is dirty, to test a dirty file is in persistent dir
- // with a symlink in outgoing dir referencing it.
+ true, false },
+ // Cache resource with a non-existent source file that is pinned.
+ { "", "pinned:non-existent", "md5_pinned_non_existent", true, false },
+ // Cache resource that is dirty.
{ "gdata/account_metadata.json", "dirty:existing", "md5_dirty_existing",
- test_util::TEST_CACHE_STATE_PRESENT |
- test_util::TEST_CACHE_STATE_DIRTY |
- test_util::TEST_CACHE_STATE_PERSISTENT,
- "local", DriveCache::CACHE_TYPE_PERSISTENT },
- // Cache resource that is pinned and dirty, to test a dirty pinned file is in
- // persistent dir with symlink in pinned and outgoing dirs referencing it.
+ false, true },
+ // Cache resource that is pinned and dirty.
{ "gdata/basic_feed.json", "dirty_and_pinned:existing",
- "md5_dirty_and_pinned_existing",
- test_util::TEST_CACHE_STATE_PRESENT |
- test_util::TEST_CACHE_STATE_PINNED |
- test_util::TEST_CACHE_STATE_DIRTY |
- test_util::TEST_CACHE_STATE_PERSISTENT,
- "local", DriveCache::CACHE_TYPE_PERSISTENT },
+ "md5_dirty_and_pinned_existing", true, true },
};
const int64 kLotsOfSpace = kMinFreeSpace * 10;
@@ -119,6 +96,27 @@ void OnClearAll(bool* out_success, bool success) {
*out_success = success;
}
+// Used as a CacheOperationCallback to copy results from DriveCache methods.
+void OnCacheOperation(DriveFileError* out_error,
+ std::string* out_resource_id,
+ std::string* out_md5,
+ DriveFileError error,
+ const std::string& resource_id,
+ const std::string& md5) {
+ *out_error = error;
+ *out_resource_id = resource_id;
+ *out_md5 = md5;
+}
+
+// Used as a GetFileFromCacheCallback to copy results from DriveCache methods.
+void OnGetFile(DriveFileError* out_error,
+ FilePath* out_cache_file_path,
+ DriveFileError error,
+ const FilePath& cache_file_path) {
+ *out_error = error;
+ *out_cache_file_path = cache_file_path;
+}
+
} // namespace
class DriveCacheTest : public testing::Test {
@@ -171,101 +169,70 @@ class DriveCacheTest : public testing::Test {
profile_.reset(NULL);
}
- void PrepareForInitCacheTest() {
- DVLOG(1) << "PrepareForInitCacheTest start";
- // Create drive cache sub directories.
- ASSERT_TRUE(file_util::CreateDirectory(
- cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PERSISTENT)));
- ASSERT_TRUE(file_util::CreateDirectory(
- cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_TMP)));
- ASSERT_TRUE(file_util::CreateDirectory(
- cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_PINNED)));
- ASSERT_TRUE(file_util::CreateDirectory(
- cache_->GetCacheDirectoryPath(DriveCache::CACHE_TYPE_OUTGOING)));
-
- // Dump some files into cache dirs so that
- // DriveFileSystem::InitializeCacheOnBlockingPool would scan through them
- // and populate cache map accordingly.
-
- // Copy files from data dir to cache dir to act as cached files.
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) {
- const struct InitialCacheResource& resource = initial_cache_resources[i];
- // Determine drive cache file absolute path according to cache state.
- FilePath dest_path = cache_->GetCacheFilePath(
- resource.resource_id,
- resource.md5,
- test_util::ToCacheEntry(resource.cache_state).is_pinned() ||
- test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
- DriveCache::CACHE_TYPE_PERSISTENT :
- DriveCache::CACHE_TYPE_TMP,
- test_util::ToCacheEntry(resource.cache_state).is_dirty() ?
- DriveCache::CACHED_FILE_LOCALLY_MODIFIED :
- DriveCache::CACHED_FILE_FROM_SERVER);
-
- // Copy file from data dir to cache subdir, naming it per cache files
- // convention.
- if (test_util::ToCacheEntry(resource.cache_state).is_present()) {
+ void PrepareTestCacheResources() {
+ EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
+ .WillRepeatedly(Return(kLotsOfSpace));
+
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cache_resources); ++i) {
+ const struct TestCacheResource& resource = test_cache_resources[i];
+ // Copy file from data dir to cache.
+ if (!std::string(resource.source_file).empty()) {
FilePath source_path =
google_apis::test_util::GetTestFilePath(resource.source_file);
- ASSERT_TRUE(file_util::CopyFile(source_path, dest_path));
- } else {
- dest_path = FilePath(FILE_PATH_LITERAL(kSymLinkToDevNull));
- }
- // Create symbolic link in pinned dir, naming it per cache files
- // convention.
- if (test_util::ToCacheEntry(resource.cache_state).is_pinned()) {
- FilePath link_path = cache_->GetCacheFilePath(
- resource.resource_id,
- "",
- DriveCache::CACHE_TYPE_PINNED,
- DriveCache::CACHED_FILE_FROM_SERVER);
- ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path));
+ DriveFileError error = DRIVE_FILE_OK;
+ std::string resource_id;
+ std::string md5;
+ cache_->Store(resource.resource_id,
+ resource.md5,
+ source_path,
+ DriveCache::FILE_OPERATION_COPY,
+ base::Bind(&OnCacheOperation,
+ &error, &resource_id, &md5));
+ google_apis::test_util::RunBlockingPoolTask();
+ EXPECT_EQ(DRIVE_FILE_OK, error);
+ EXPECT_EQ(resource.resource_id, resource_id);
+ EXPECT_EQ(resource.md5, md5);
}
-
- // Create symbolic link in outgoing dir, naming it per cache files
- // convention.
- if (test_util::ToCacheEntry(resource.cache_state).is_dirty()) {
- FilePath link_path = cache_->GetCacheFilePath(
- resource.resource_id,
- "",
- DriveCache::CACHE_TYPE_OUTGOING,
- DriveCache::CACHED_FILE_FROM_SERVER);
- ASSERT_TRUE(file_util::CreateSymbolicLink(dest_path, link_path));
+ // Pin.
+ if (resource.is_pinned) {
+ DriveFileError error = DRIVE_FILE_OK;
+ std::string resource_id;
+ std::string md5;
+ EXPECT_CALL(*mock_cache_observer_,
+ OnCachePinned(resource.resource_id, resource.md5)).Times(1);
+ cache_->Pin(resource.resource_id,
+ resource.md5,
+ base::Bind(&OnCacheOperation,
+ &error, &resource_id, &md5));
+ google_apis::test_util::RunBlockingPoolTask();
+ EXPECT_EQ(DRIVE_FILE_OK, error);
+ EXPECT_EQ(resource.resource_id, resource_id);
+ EXPECT_EQ(resource.md5, md5);
+ }
+ // Mark dirty.
+ if (resource.is_dirty) {
+ DriveFileError error = DRIVE_FILE_OK;
+ FilePath cache_file_path;
+ cache_->MarkDirty(resource.resource_id,
+ resource.md5,
+ base::Bind(&OnGetFile, &error, &cache_file_path));
+ google_apis::test_util::RunBlockingPoolTask();
+ EXPECT_EQ(DRIVE_FILE_OK, error);
+
+ std::string resource_id;
+ std::string md5;
+ EXPECT_CALL(*mock_cache_observer_,
+ OnCacheCommitted(resource.resource_id)).Times(1);
+ cache_->CommitDirty(resource.resource_id,
+ resource.md5,
+ base::Bind(&OnCacheOperation,
+ &error, &resource_id, &md5));
+ google_apis::test_util::RunBlockingPoolTask();
+ EXPECT_EQ(DRIVE_FILE_OK, error);
+ EXPECT_EQ(resource.resource_id, resource_id);
+ EXPECT_EQ(resource.md5, md5);
}
- }
-
- DVLOG(1) << "PrepareForInitCacheTest finished";
- cache_->ForceRescanForTesting();
- google_apis::test_util::RunBlockingPoolTask();
- }
-
- void TestInitializeCache() {
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(initial_cache_resources); ++i) {
- const struct InitialCacheResource& resource = initial_cache_resources[i];
- // Check cache file.
- num_callback_invocations_ = 0;
- TestGetFileFromCacheByResourceIdAndMd5(
- resource.resource_id,
- resource.md5,
- test_util::ToCacheEntry(resource.cache_state).is_present() ?
- DRIVE_FILE_OK :
- DRIVE_FILE_ERROR_NOT_FOUND,
- resource.expected_file_extension);
- EXPECT_EQ(1, num_callback_invocations_);
-
- // Verify cache state.
- std::string md5;
- if (test_util::ToCacheEntry(resource.cache_state).is_present())
- md5 = resource.md5;
- DriveCacheEntry cache_entry;
- ASSERT_TRUE(GetCacheEntryFromOriginThread(
- resource.resource_id, md5, &cache_entry));
- EXPECT_TRUE(test_util::CacheStatesEqual(
- test_util::ToCacheEntry(resource.cache_state),
- cache_entry));
- EXPECT_EQ(resource.expected_sub_dir_type,
- DriveCache::GetSubDirectoryType(cache_entry));
}
}
@@ -769,11 +736,6 @@ class DriveCacheTest : public testing::Test {
int root_feed_changestamp_;
};
-TEST_F(DriveCacheTest, InitializeCache) {
- PrepareForInitCacheTest();
- TestInitializeCache();
-}
-
TEST_F(DriveCacheTest, GetCacheFilePath) {
// Use alphanumeric characters for resource id.
std::string resource_id("pdf:1a2b");
@@ -1484,7 +1446,7 @@ TEST_F(DriveCacheTest, MountUnmount) {
}
TEST_F(DriveCacheTest, Iterate) {
- PrepareForInitCacheTest();
+ PrepareTestCacheResources();
std::vector<std::string> resource_ids;
std::vector<DriveCacheEntry> cache_entries;
@@ -1510,8 +1472,6 @@ TEST_F(DriveCacheTest, Iterate) {
TEST_F(DriveCacheTest, ClearAll) {
- PrepareForInitCacheTest();
-
EXPECT_CALL(*mock_free_disk_space_checker_, AmountOfFreeDiskSpace())
.Times(AtLeast(1)).WillRepeatedly(Return(kLotsOfSpace));
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698