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 3// found in the LICENSE file. 4 5#include "chrome/browser/chromeos/drive/file_cache_metadata.h" 6 7#include "base/file_util.h" 8#include "base/files/scoped_temp_dir.h" 9#include "chrome/browser/chromeos/drive/drive.pb.h" 10#include "chrome/browser/chromeos/drive/file_system_util.h" 11#include "chrome/browser/chromeos/drive/test_util.h" 12#include "chrome/browser/google_apis/test_util.h" 13#include "testing/gtest/include/gtest/gtest.h" 14 15namespace drive { 16namespace internal { 17 18class FileCacheMetadataTest : public testing::Test { 19 public: 20 virtual void SetUp() OVERRIDE { 21 // Create cache directories. 22 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 23 metadata_.reset(new FileCacheMetadata(NULL)); 24 } 25 26 protected: 27 base::ScopedTempDir temp_dir_; 28 scoped_ptr<FileCacheMetadata> metadata_; 29}; 30 31// Test all the methods of FileCacheMetadata except for 32// RemoveTemporaryFiles. 33TEST_F(FileCacheMetadataTest, CacheTest) { 34 ASSERT_EQ(FileCacheMetadata::INITIALIZE_CREATED, 35 metadata_->Initialize(temp_dir_.path().AppendASCII("test.db"))); 36 37 // Save an initial entry. 38 std::string test_resource_id("test_resource_id"); 39 std::string test_md5("test_md5"); 40 { 41 FileCacheEntry new_cache_entry; 42 new_cache_entry.set_md5(test_md5); 43 new_cache_entry.set_is_present(true); 44 metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 45 } 46 47 // Test that the entry can be retrieved. 48 FileCacheEntry cache_entry; 49 ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 50 EXPECT_EQ(test_md5, cache_entry.md5()); 51 EXPECT_TRUE(cache_entry.is_present()); 52 53 // resource_id doesn't exist. 54 EXPECT_FALSE(metadata_->GetCacheEntry("not_found_resource_id", &cache_entry)); 55 56 // Update all attributes. 57 test_md5 = "test_md5_2"; 58 { 59 FileCacheEntry updated_cache_entry; 60 updated_cache_entry.set_md5(test_md5); 61 updated_cache_entry.set_is_pinned(true); 62 metadata_->AddOrUpdateCacheEntry(test_resource_id, updated_cache_entry); 63 } 64 65 // Make sure the values took. 66 ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 67 EXPECT_EQ(test_md5, cache_entry.md5()); 68 EXPECT_TRUE(cache_entry.is_pinned()); 69 70 // Test dirty cache. 71 test_md5 = "test_md5_3"; 72 { 73 FileCacheEntry new_cache_entry; 74 new_cache_entry.set_md5(test_md5); 75 new_cache_entry.set_is_dirty(true); 76 metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 77 } 78 79 // Make sure the values took. 80 ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 81 EXPECT_EQ(test_md5, cache_entry.md5()); 82 EXPECT_TRUE(cache_entry.is_dirty()); 83 84 // Remove the entry. 85 metadata_->RemoveCacheEntry(test_resource_id); 86 EXPECT_FALSE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 87 88 // Add another one. 89 test_resource_id = "test_resource_id_2"; 90 test_md5 = "test_md5_4"; 91 { 92 FileCacheEntry new_cache_entry; 93 new_cache_entry.set_md5(test_md5); 94 new_cache_entry.set_is_present(true); 95 metadata_->AddOrUpdateCacheEntry(test_resource_id, new_cache_entry); 96 } 97 98 // Make sure the values took. 99 ASSERT_TRUE(metadata_->GetCacheEntry(test_resource_id, &cache_entry)); 100 EXPECT_EQ(test_md5, cache_entry.md5()); 101 EXPECT_TRUE(cache_entry.is_present()); 102} 103 104TEST_F(FileCacheMetadataTest, Initialize) { 105 const base::FilePath db_path = temp_dir_.path().AppendASCII("test.db"); 106 107 // Try to open a bogus file. 108 ASSERT_TRUE( 109 google_apis::test_util::WriteStringToFile(db_path, "Hello world")); 110 ASSERT_EQ(FileCacheMetadata::INITIALIZE_CREATED, 111 metadata_->Initialize(db_path)); 112 113 // Open an existing DB. 114 metadata_.reset(new FileCacheMetadata(NULL)); 115 EXPECT_EQ(FileCacheMetadata::INITIALIZE_OPENED, 116 metadata_->Initialize(db_path)); 117 118 // Try to open a nonexistent path. 119 base::FilePath non_existent_path(FILE_PATH_LITERAL( 120 "/somewhere/nonexistent/test.db")); 121 metadata_.reset(new FileCacheMetadata(NULL)); 122 EXPECT_EQ(FileCacheMetadata::INITIALIZE_FAILED, 123 metadata_->Initialize(non_existent_path)); 124} 125 126} // namespace internal 127} // namespace drive 128